隐藏子视图上的TabView

问题描述 投票:0回答:1

我有一个小问题。我有一个底部选项卡栏,随处可见。但我只想在一个视图(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。预先感谢

swiftui tabview
1个回答
0
投票

你的代码有点不清楚,但你可以尝试使用三元条件运算符

.toolbar(selectedTab == tabToHide ? .hidden : .visible, for: .tabBar).

其中 selectedTab 是当前选项卡,如果它等于您要隐藏的选项卡,则发生 .hidden

© www.soinside.com 2019 - 2024. All rights reserved.