SwiftUI Nested NavigationView показывает несколько панелей навигации - PullRequest
0 голосов
/ 30 января 2020

Мой 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 (я не хочу отображать новый вид как модальный!).

Ниже приведен пример кода для тестирования:


//  
//  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 Ответ

1 голос
/ 18 февраля 2020

Вам нужен только 1 NavigationView при просмотре root. Удалите один в DetailView1.

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