SwiftUI嵌套的NavigationViews显示多个导航栏

时间:2020-01-30 17:02:49

标签: swiftui-navigationlink

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

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

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

2 nav bars

有没有一种方法可以使用NavigationLink而不将其嵌入到另一个NaviagationView中,或者可以通过不使用NavigationLink和诸如.sheet之类的内容导航到另一个视图(我不想将新视图显示为模态!)。 / p>

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


//  
//  ContentView.swift  
//  Two Navbars  
//  
//  Created by Max on 2020-02-05.  
//  Copyright © 2020 Max. All rights reserved.  
//  

import SwiftUI  

struct ContentView: View {  
  var body: some View {  
  NavigationView{  
  ScrollView{  
  VStack{  
  NavigationLink(destination: ListView1()){  
  Text("Tap me")  
  }  

  Text("Nothing here")  
  }  
  }  
  }  
  }  
}  

struct ListView1: View {  

  var body: some View {  
  List{  
  NavigationLink(destination: DetailView1()){  
  Text("Tap me one more time")  
  }  

  Text("Item 2")  
  Text("Item 3")  
  }  
  }  
}  

struct DetailView1: View {  

  var body: some View {  
  NavigationView{  
  ScrollView() {  
  VStack{  
  NavigationLink(destination: DetailView2()){  
  Text("Drill down more")  
  }  
  Text("Nothing here")  
  }  
  }  
  }  
  }  
}  

struct DetailView2: View {  

  var body: some View {  
  List {  
  Text("That's it")  
  Text("Nothing here")  
  }  
  }  
}  




struct ContentView_Previews: PreviewProvider {  
  static var previews: some View {  
  ContentView()  
  }  
}  

1 个答案:

答案 0 :(得分:1)

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

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