SwiftUI 嵌套导航视图显示多个导航栏

Max*_*x B 1 swiftui-navigationlink

我的 ContentView 包括一个 NavigationView,我通过 NavigationLink 向下钻取到显示列表的 OverviewView,然后通过 NavigationLink 向下钻取到 DetailView。现在我想点击 DetailView 中的文本并调出另一个视图,但是当我现在尝试向该对象添加 NavigationLink 时,我收到一条错误,指出 NavigationLink 需要嵌入到 NavigationView 中,因此我将代码更改为

\n\n
    NavigationView{  \n  ScrollView() {  \n  VStack{  \n  VStack(spacing: -25) {  \n  HStack(spacing: -25) {  \n  NavigationLink(destination: WarehouseOrderLinesView(warehouseOrderLines: warehouseOrderLineController.warehouseOrderLines)){  \n  TaskSummaryView(title: "Total Lines", color: .blue, icon: "list.dash", value: warehouseOrderLineController.warehouseOrderLines.count)  \n  } \n
Run Code Online (Sandbox Code Playgroud)\n\n

但现在由于另一个 NavigationView 中有一个 NavigationView,我最终在顶部有 2 个导航栏。

\n\n

2 个导航栏

\n\n

有没有办法使用 NavigationLink 而不将其嵌入到另一个 NaviagationView 中,或者通过不使用 NavigationLink 和 .sheet 之类的东西导航到另一个视图(我不想将新视图显示为模态!)。

\n\n

下面是完整的测试示例代码:

\n\n
\n//  \n//  ContentView.swift  \n//  Two Navbars  \n//  \n//  Created by Max on 2020-02-05.  \n//  Copyright \xc2\xa9 2020 Max. All rights reserved.  \n//  \n\nimport SwiftUI  \n\nstruct ContentView: View {  \n  var body: some View {  \n  NavigationView{  \n  ScrollView{  \n  VStack{  \n  NavigationLink(destination: ListView1()){  \n  Text("Tap me")  \n  }  \n\n  Text("Nothing here")  \n  }  \n  }  \n  }  \n  }  \n}  \n\nstruct ListView1: View {  \n\n  var body: some View {  \n  List{  \n  NavigationLink(destination: DetailView1()){  \n  Text("Tap me one more time")  \n  }  \n\n  Text("Item 2")  \n  Text("Item 3")  \n  }  \n  }  \n}  \n\nstruct DetailView1: View {  \n\n  var body: some View {  \n  NavigationView{  \n  ScrollView() {  \n  VStack{  \n  NavigationLink(destination: DetailView2()){  \n  Text("Drill down more")  \n  }  \n  Text("Nothing here")  \n  }  \n  }  \n  }  \n  }  \n}  \n\nstruct DetailView2: View {  \n\n  var body: some View {  \n  List {  \n  Text("That\'s it")  \n  Text("Nothing here")  \n  }  \n  }  \n}  \n\n\n\n\nstruct ContentView_Previews: PreviewProvider {  \n  static var previews: some View {  \n  ContentView()  \n  }  \n}  \n
Run Code Online (Sandbox Code Playgroud)\n

小智 6

您只需要在根视图上有 1 个 NavigationView。删除 DetailView1 中的那个。

struct DetailView1: View {  
    var body: some View {  
        ScrollView(){  
            VStack {  
                NavigationLink(destination: DetailView2()){  
                    Text("Drill down more")  
                }  
                Text("Nothing here")  
            }  
         }  
      }  
  }  
}  
Run Code Online (Sandbox Code Playgroud)