我有两个 View ,每个 View 都包含带有标题的NavigationView。我创建了一个TabBar View ,上面也带有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)
}
}
我曾尝试隐藏此 View 的navigationBar,但这不起作用。仅此 View 的导航栏出现。
这是
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)
在此过程中,它显示了带有 subview 的TabbarView(),这就是我看到的内容:
因为我将其插入navigationStack中,所以“旅行”上方的空间(childView的navigationBarTitle)是标签栏的navigationBar。
最佳答案
这里首先要指出的是,您代码中所有的导航栏修饰符应该是NavigationView
内部 View 上的修饰符,而不是NavigationView
本身上的修饰符。例如,从.navigationBarTitle
的文档中:
同样,也不需要将NavigationView
包裹起来的TabView
,然后再在MainContentView
内部包裹另一个NavigationView
。这只会导致嵌套的导航栏,而您绝对不希望那样。相反,只需使用一个NavigationView
即可。我还建议您不要将MainContentView
放在.navigationBarBackButtonHidden
主体内。
我重构了您的代码以显示我在说什么,尽管我不确定您在哪里尝试使用.navigationBarHidden
和.navigationBarTitle
,所以我省略了它们。请记住,它们的功能就像NavigationView
一样-您需要将它们用作NavigationView
内部 View 上的修饰符,而不是VStack
本身。
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")
}
}
您可能会注意到,我还从.tabItem
中删除了Text
。您可以将Image
和.tabItem
都放入VStack
中,而无需.tabItem
,如果我没记错的话,Text
会忽略任何不是Image
或ojit_code的内容。