如何在 SwiftUI 的标签栏的特定视图中隐藏导航栏?

Posted

技术标签:

【中文标题】如何在 SwiftUI 的标签栏的特定视图中隐藏导航栏?【英文标题】:How do I hide navigation bar in the tab bar's specific view in SwiftUI? 【发布时间】:2019-07-14 10:45:49 【问题描述】:

XCode11 beta3, MacOS Catalina 10.15 Beta(19A501i)

我想在push时隐藏tabBar~任何命令都会很有帮助,谢谢~

Click me to show gif image :

struct ContentView : View 
    var body: some View 
        WhenNavigationViewIsRootView()
    


struct WhenNavigationViewIsRootView : View 
    var body: some View 
        NavigationView 
            TabbedView
                Rectangle().foregroundColor(.green)
                    .tag(0).tabItemText("Page1")

                VStack 
                    List 
                        ForEach(0...2)  i in
                            NavigationLink(
                                destination: Text("\(i)"),
                                label: Text("\(i)"))
                        
                    
                .tag(1).tabItemText("Page2")
            
            .navigationBarHidden(true)
        
    

【问题讨论】:

我已经删除了我的答案——它真的应该是一个评论,因为我没有为你的问题提供解决方案。我对您问题中的错误也略有误解。问题出在你的 gif 中。 gif 1 中的画布不是 gif 1 中显示的代码的正确画布,gif 2 中的画布不是 gif 2 中显示的代码的正确画布。应该交换画布。这就是为什么你为正在发生的事情提供的描述在我看来是倒退的——因为画布是倒退的。我建议您编辑您的问题,以便其他人可以提供帮助。 无论如何还是谢谢~因为你之前的评论是帮助我澄清问题。 我自己也想知道这个问题的答案,因为我遇到了完全相同的问题 @Rob 我已经更新了我的答案。让我知道这是否能解决您的问题或您还有其他问题。 【参考方案1】:

如果要隐藏TabbedView 中的导航栏,则必须在嵌套在TabbedView 中的视图上设置.navigationBarHidden(true)。然而,这还不够。无论出于何种原因,SwiftUI 都要求您先设置导航栏标题,然后才能隐藏导航栏。

NavigationView 
    TabbedView
        Rectangle()
            .foregroundColor(.green)
            .tag(0)
            .tabItem
                Text("Page1")
            
            .navigationBarTitle("")
            .navigationBarHidden(true)

        List(0...2)  i in
            NavigationLink(destination: Text("\(i)")) 
                Text("\(i)")
            
        
        .tag(1)
        .tabItem 
            Text("Page2")
        
        .navigationBarTitle("")
        .navigationBarHidden(true)
    

【讨论】:

感谢您的快速回复和提醒,我已经修正了我的描述,并根据您的建议更改问题。 在 SwiftUI developer.apple.com/documentation/uikit/uiviewcontroller/… 中似乎需要一些属性,例如“hidesBottomBarWhenPushed”@ 感谢您的详细解释和代码示例:) 问题是“如何隐藏标签栏?”但这显示了如何隐藏导航栏,这不是问题的答案。 @GeneZ.Ragan 你是对的。最初的问题令人困惑,很难准确地理解原始发帖人在寻找什么。我的答案似乎正确回答了我发布时他们提出的问题,但他们继续编辑问题,因此它实际上不再回答问题了。由于他们将其标记为已接受的答案,因此我从未真正确定是否应该将其删除。真正的答案是,据我所知,没有办法隐藏标签栏。

以上是关于如何在 SwiftUI 的标签栏的特定视图中隐藏导航栏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 15 中使用 SwiftUI 在特定视图中隐藏 TabBar

隐藏标签栏并在该位置添加工具栏

如何计算 SwiftUI 中的标签栏高度?

带有 SwiftUI 的标签栏上方的额外导航视图

在某些视图控制器中隐藏状态栏 *特定*

一行代码为特定状态绑定SwiftUI视图动画