我对显示在NavigationStack内部的TabView有问题.TabView包含多个视图.每个视图都有自己的导航栏标题和工具栏.问题是没有显示这些视图、工具栏和导航标题.只是在视图中定义的内容.我编写了以下代码:

struct Home : View {
 var body some : View {
      NavigationStack {
          TabView(selection: $router.currentTab) {
            First()
                .tag(0)
            
            Second()
                .tag(1)
            
            Third()
                .tag(2)
            
            Fourth()
                .tag(3)
            
            Fifth()
                .tag(4)
        }
    }
 }
}

第一个()视图的定义如下(所有其他视图的 struct 都类似):

  struct First: View {
    
    var body: some View {
        ZStack {
            Color("background").ignoresSafeArea(.all)
            ScrollView {
                VStack(spacing: 15) {
                    
                    WhatsNewView()
                    
                    FavoriteView()
                    
                    Spacer()
                }
            }
            .refreshable {
                DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                    newsService.getArticles()
                    simpleSuccess()
                }
            }
        }
        .toolbar {
            ToolbarItem(placement: .navigationBarTrailing) {
                UserButton()
            }
            
            ToolbarItem(placement: .navigationBarLeading) {
                ToolbarRanking()
            }
            
            ToolbarItem(placement: .navigationBarLeading) {
                ToolbarCalendar()
            }
            
            ToolbarItem(placement: .navigationBarLeading) {
                ToolbarSearch()
            }
        }
        .navigationBarTitle("Home")
    }
}

有人知道如何解决这个问题吗?

推荐答案

TabView应该是你的顶层视图.

然后,每个选项卡都应该包含自己的NavigationStack个.例如:

enum Router {
    case screenA, screenB
}

struct ContentView: View {
    
    var body: some View {
        TabView() {
            FirstScreen()
            
            NavigationStack {
                Text("second")
                    .navigationTitle("second")
            }
            .tabItem {
                Label("second", systemImage: "2.circle")
            }
            NavigationStack {
                Text("third")
                    .navigationTitle("third")
            }
            .tabItem {
                Label("third", systemImage: "3.circle")
            }
            NavigationStack {
                Text("fourth")
                    .navigationTitle("fourth")
            }
            .tabItem {
                Label("fourth", systemImage: "4.circle")
            }

            NavigationStack {
                Text("fifth")
                    .navigationTitle("fifth")
            }
            .tabItem {
                Label("fifth", systemImage: "5.circle")
            }
        }
    }
}

struct FirstScreen: View {
    
    @State private var path: [Router] = []
    
    var body: some View {
        NavigationStack(path: $path) {
            VStack {
                Text("first")
                NavigationLink("Screen A", value: Router.screenA)
            }
            .navigationDestination(for: Router.self) { router in
                switch router {
                case .screenA:
                    VStack {
                        NavigationLink("Screen B", value: Router.screenB)
                    }
                    .navigationTitle("Screen A")
                    
                case .screenB:
                    VStack {
                        Button("Pop to root") {
                            path = []
                        }
                    }
                    .navigationTitle("Screen B")
                }
            }
            .navigationTitle("first")
        }
        .tabItem {
            Label("first", systemImage: "1.circle")
        }
        .task {
            print("First screen task")
        }
        .onAppear {
            print("First screen appears")
        }
    }
}

enter image description here

Swift相关问答推荐

自定义完整屏幕封面动画

如何避免使用DispatchSemaphores时线程爆炸?

在解码字符串时需要帮助.

如何在visionOS中进行购买?&# 39;购买(选项:)在visionOS中不可用

仅使用@MainActor注释类的部分时的并发问题

在Swift中,将秒设置为0也等于将1添加到分钟

将matchedGeometryEffect 应用于列表视图内的视图时,列表视图中的项目会受到影响 - SwiftUI

物理主体未与 spritekit Swift 的网格图案上的纹理图像对齐

使第二个视图变灰 SwiftUI

有没有更快的方法来循环浏览 macOS 上已安装的应用程序?

如何使用 ISO 国家代码(2 个字母)查找区域设置标识符

Swift 根据总值将数组拆分为块

NSFontAttributeName 已更改为 String

不支持用作符合协议 AnyObject 的具体类型

无法分配给属性:self 是不可变的,我知道如何修复但需要理解

更改日期 Select 器的文本 colored颜色

Swift:如何从函数返回类类型

Swift 中的可选数组与空数组

来自 ObservableObject 的绑定值

Swift 中的单元测试致命错误