我有一个小问题。我有一个底部选项卡栏,随处可见。但我只想在一个视图(MessageView)中隐藏选项卡视图。如何做到这一点?
我的选项卡视图:
import SwiftUI
struct TabBarView: View {
@AppStorage("isDarkMode") var isDarkMode: Bool = false
@Binding var selectedTab: Int
var body: some View {
TabView(selection: $selectedTab) {
Group {
ContactsView(isDarkMode: $isDarkMode)
.tabItem {
Image(systemName: "person")
Text("Contacts")
}
.tag(0)
CallsView(isDarkMode: $isDarkMode)
.tabItem {
Image(systemName: "phone")
Text("Calls")
}
.tag(1)
ChatsView(isDarkMode: $isDarkMode)
.tabItem {
Image(systemName: "bubble.left")
Text("Chats")
}
.tag(2)
SettingsView()
.environmentObject(AuthViewModel())
.tabItem {
Image(systemName: "gearshape")
Text("Settings")
}
.tag(3)
}
.toolbarBackground(.visible, for: .tabBar)
}
}
}
struct TabBarView_Previews: PreviewProvider {
@State static var mockSelectedTab = 2
static var previews: some View {
TabBarView(selectedTab: $mockSelectedTab)
}
}
我的留言查看:
import SwiftUI
struct MessageView: View {
@State private var messageText: String = ""
@State private var isMicButton: Bool = true
@Binding var isDarkMode: Bool
var contact: Contact
var body: some View {
VStack {
ScrollView {
// List of messages
}
.onTapGesture {hideKeyboard()}
// Message Input Area
HStack {
Button(action: {
// Add Media Action
}) {
Image(systemName: "photo")
}
TextField("Type a message", text: $messageText)
.textFieldStyle(RoundedBorderTextFieldStyle())
.padding(.horizontal)
if messageText.isEmpty {
Button(action: {
if isMicButton {
// Send Audio Message
} else {
// Send Video Message
}
isMicButton.toggle()
}) {
Image(systemName: isMicButton ? "mic.fill" : "video.fill")
}
} else {
Button(action: {
// Send Text Message
messageText = ""
}) {
Image(systemName: "paperplane.fill")
}
}
}
.padding(.horizontal)
}
.background(isDarkMode ? AnyView(DarkMode()) : AnyView(LightMode()))
.navigationBarTitleDisplayMode(.inline)
.toolbar(.hidden, for: .tabBar)
.toolbar {
ToolbarItem(placement: .principal) {
VStack(alignment: .center) {
Text(contact.name)
.font(.headline)
Text("Last Active: Today")
.font(.subheadline)
.foregroundColor(.gray)
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Text(contact.avatar)
.font(.largeTitle)
}
}
}
}
struct MessageView_Previews: PreviewProvider {
@State static var isDarkMode = false
static var previews: some View {
MessageView(isDarkMode: $isDarkMode, contact: Contact(name: "Alice", avatar: "👩", messages: [Message(text: "Hi", timestamp: Date())]))
}
}
我尝试使用 .toolbar(.hidden, for: .tabBar)。但它到处都隐藏了tabView。预先感谢
我尝试使用 .toolbar(.hidden, for: .tabBar)。但它到处都隐藏了tabView。预先感谢
你的代码有点不清楚,但你可以尝试使用三元条件运算符
.toolbar(selectedTab == tabToHide ? .hidden : .visible, for: .tabBar).
其中 selectedTab 是当前选项卡,如果它等于您要隐藏的选项卡,则发生 .hidden