我有两个视图,每个视图都包含带有标题的NavigationView。我创建了一个TabBar视图,上面也带有NavigationView。
struct TabbarView: View { var body: some View { NavigationView{ TabView { MainContentView() .tabItem { VStack { Text("Main") } }.tag(0) SearchContentView() .tabItem { VStack { Text("Search") } }.tag(1) } }.navigationBarBackButtonHidden(true) .navigationBarHidden(true) }
}
我曾尝试隐藏此视图的navigationBar,但这不起作用。仅此视图的导航栏出现。
这是 MainContentView()
struct MainContentView: View { var body: some View { NavigationView { Text("Some Content View") } .navigationBarTitle("Travel") }
}
任何想法如何去做。谢谢!
更新:基本上,当我点击“ 登录”按钮时,我正在通过NavigationLink传递TabBarView()。
NavigationLink(destination: TabbarView()) { HStack { Text("Log In") } .padding() .frame(width: geometry.size.width - 40, height: 40) .foregroundColor(Color.white) .background(Color.blue) .cornerRadius(5) }.padding(.bottom, 40)
这样做时,它显示了带有子视图的TabbarView(),这就是我看到的:因为我将其推入navigationStack中,所以“旅行”(childView的navigationBarTitle)上方的空间就是该标签栏的navigationBar。
这里要指出的第一件事是,您代码中的所有导航栏修饰符应为内的视图上的NavigationView
修饰符,而不是NavigationView
其本身上的修饰符。从的文档中.navigationBarTitle
,例如:
仅当此视图在NavigationView内部并在NavigationView中可见时,此修饰符才生效。
另外,您也无需在内NavigationView
包装TabView
另一个MainContentView
。这只会导致嵌套的导航栏,而您绝对不希望那样。相反,只需使用一个NavigationView
。我也建议你不要把NavigationView
里面MainContentView
的身体。
我已经重构了您的代码以显示我在说什么,尽管我不确定您在哪里尝试使用.navigationBarBackButtonHidden
and .navigationBarHidden
,所以我省略了它们。只需记住它们的功能就像.navigationBarTitle
-您需要将它们用作内部视图的修饰符NavigationView
,而不是NavigationView
其本身。
struct TabBarView: View {
var body: some View {
TabView {
NavigationView {
MainContentView()
}
.tag(0)
.tabItem {
Text("Main")
}
SearchContentView()
.tag(1)
.tabItem {
Text("Search")
}
}
}
}
struct MainContentView: View {
var body: some View {
Text("Some Content View")
.navigationBarTitle("Travel")
}
}
正如你可能会注意到,我也去掉了VStack
从.tabItem
。你可以把两者Text
和Image
内.tabItem
而不需要一个VStack
,如果我没有记错,.tabItem
忽略任何不Text
和Image
呢。