SwiftUI - 正确使用导航视图和工作表

glo*_*kwl 7 navigationbar swiftui navigationlink

导航视图和工作表存在问题。我有以下流程: - ContentView:具有打开 ContentView2 工作表的按钮 - ContentView2:具有导航链接,其标题可转到 ContentView3 - ContentView3:具有导航链接,无标题,可将用户引导至 ContentView2

但是,当我设置上述流程时,当用户在 ContentView2 和 ContentView3 之间来回切换时,我最终会得到堆叠的标头。当用户在两个视图之间来回切换时,我该如何防止这种情况并且只有 1 个标头?谢谢!

struct ContentView: View {
    @State var showSheet = false

    var body: some View {
        Button("Click"){
            self.showSheet.toggle()
        }
        .sheet(isPresented: $showSheet) {
            ContentView2()
        }
    }
}


struct ContentView2: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: ContentView3()){
                Text("Click Here")
            }
            .navigationBarTitle("Bar Title", displayMode: .inline)
        }
    }
}

struct ContentView3: View {
    var body: some View {
        NavigationLink(destination: ContentView2()){
            Text("Click Here")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题截图

Asp*_*eri 7

您只需要NavigationView根目录中的一个,因此这里是更正的组件

struct ContentView: View {
    @State var showSheet = false

    var body: some View {
        Button("Click"){
            self.showSheet.toggle()
        }
        .sheet(isPresented: $showSheet) {
           NavigationView {    // only here !!
            ContentView2()
           }
        }
    }
}


struct ContentView2: View {
    var body: some View {
         NavigationLink(destination: ContentView3()){
             Text("Click Here")
         }
         .navigationBarTitle("Bar Title", displayMode: .inline)
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 具有导航按钮项目在工作表中不起作用。 (2认同)