我有两个 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。

ios - 当 View 位于SwiftUI的TabView中时,NavigationView标题不出现-LMLPHP

最佳答案

这里首先要指出的是,您代码中所有的导航栏修饰符应该是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的内容。

10-04 23:09
查看更多