在SwiftUI中,我如何在选项卡栏的特定视图中隐藏导航栏?

4

XCode11 beta3,MacOS Catalina 10.15 Beta(19A501i)

我想在推送时隐藏tabBar~ 任何命令都将非常有帮助,谢谢~

点击我查看gif图片:

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

struct WhenNavigationViewIsRootView : View {
    var body: some View {
        NavigationView {
            TabbedView{
                Rectangle().foregroundColor(.green)
                    .tag(0).tabItem{Text("Page1")}

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

我已经删除了我的回答 - 它应该是一条评论,因为我没有提供解决方案来解决你的问题。我对你的问题中的错误也有些误解。问题在于你的gif图像。gif 1中的画布不是gif 1中显示的代码的正确画布,gif 2中的画布也不是gif 2中显示的代码的正确画布。这些画布应该被交换。这就是为什么你提供的关于发生了什么事情的描述对我来说似乎是相反的 - 因为画布是相反的。我建议你编辑你的问题,这样其他人就可以帮助你了。 - graycampbell
无论如何还是谢谢您之前的评论,帮助我澄清了问题。 - Young
我想知道这个问题的答案,因为我自己遇到了完全相同的问题。 - Rob
@Rob 我已经更新了我的答案。如果这解决了你的问题,或者你有其他问题,请告诉我。 - graycampbell
1个回答

4

如果您想隐藏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)
    }
}

感谢您的快速回复和提醒,我已经修正了我的描述,并按照您的建议修改了问题。 - Young
2
在SwiftUI中似乎需要一些类似于“hidesBottomBarWhenPushed”的属性。 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621863-hidesbottombarwhenpushed - Young
感谢您详细的解释和代码示例 :) - Young
9
问题是“如何隐藏选项卡栏?”,但这个例子展示的是如何隐藏导航栏,这并不是问题的答案。 - Gene Z. Ragan
3
@GeneZ.Ragan 你说得对。原始问题很令人困惑,很难确切理解原作者在寻找什么。我当时的回答似乎正确回答了他们当时提出的问题,但是他们继续编辑问题,所以现在它实际上并不回答该问题。由于他们将其标记为被接受的答案,我从未真正确定是否应该删除它。据我所知,没有办法隐藏选项卡栏,这才是真正的答案。 - graycampbell
谢谢@graycampbell,我已经找了好几个小时了,但是一直无法隐藏导航栏。现在有了这个.navigationBarTitle(""),它完美地起作用了。 - Qazi Ammar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接