TabView Swift UI中的NavigationView

TabView Swift UI中的NavigationView,swift,swiftui,swift5,navigationview,tabview,Swift,Swiftui,Swift5,Navigationview,Tabview,我在长时间休息后刚刚拿起SwiftUI,但我不明白为什么我不能在选项卡视图中放置导航视图 我希望我的导航视图是一个.tabItem,因此该视图显示为主应用程序导航的一部分,因此我尝试以下操作: struct ContentView: View { var body: some View { TabView { NavigationView { .tabItem {

我在长时间休息后刚刚拿起SwiftUI,但我不明白为什么我不能在
选项卡视图中放置
导航视图

我希望我的
导航视图
是一个
.tabItem
,因此该视图显示为主应用程序导航的一部分,因此我尝试以下操作:

struct ContentView: View {
    var body: some View {
            TabView {
            
        NavigationView {
            
            .tabItem {
                Text("Home")
            }
                    
            Text("Tab bar test")
                .navigationBarTitle("Page One")
        }
}
这不适用于错误消息

Cannot infer contextual base in reference to member 'tabItem'
但是当我尝试这个的时候

    var body: some View {
        TabView {
        
    NavigationView {
                
        Text("Tab bar test")
            .navigationBarTitle("Page One")
    }
}
    .tabItem {
        Image(systemName: "1.circle")
        Text("Home")
    }
}
它构建得很好,但选项卡栏不显示

我希望对其他人有用的主要问题是

为什么我不能将
导航视图
直接嵌套在
导航视图
中的
.tabItem
来创建选项卡栏项目(根据我的第一个示例)

我认为这是一个类似于的问题,但没有代码。然后非常类似于,但他们似乎在使用
.tabItem
directy和
ContentView
,就像我想使用
NavigationView
一样,但这不是构建


我可能误解了一些简单的东西,但我现在一点也不明白。

.tabItem
应该用作表示该选项卡的视图上的修饰符

在第一个示例中,由于语法错误,这不起作用--您试图在
NavigationView{
中打开闭包时使用它,而希望它位于右大括号的外侧:
NavigationView{}.tabItem(…)

在第二个示例中,您使用
.tabItem
作为整个
选项卡视图
的修饰符,而不是
导航视图

如果您缩进代码以便查看层次结构,您的两个示例可能会更清楚地揭示出发生了什么。请尝试在Xcode中选择代码,并使用Ctrl-I使Xcode为您正确格式化

以下是一个工作版本:

struct ContentView : View {
    var body: some View {
        TabView {
            NavigationView {
                Text("Tab bar test")
                    .navigationBarTitle("Page One")
            }
            .tabItem { //note how this is modifying `NavigationView`
                Image(systemName: "1.circle")
                Text("Home")
            }
            
        }
    }
}

非常感谢-好的,我现在明白了,我很清楚。我们的意思是,通过在NavigationView的右括号后添加.tabItem,它是NavigationView的修改器?感谢Xcode格式提示,很抱歉我以后会这么做!很抱歉,您在代码示例中实际注意到了这一点-再次感谢是的,这是正确的。相同的假设您正在编辑一个没有尾随闭包的视图,例如
Text(“Hello,world!”)。foregroundColor(.red)
修改器位于正在修改的
视图之后的位置。