SwiftUI - правильное использование представления навигации и таблиц - PullRequest
1 голос
/ 20 июня 2020

Проблемы с NavigationView и Sheet. У меня есть следующий поток: - ContentView: имеет кнопку, которая открывает лист ContentView2 - ContentView2: имеет NavigationLink с заголовком, который переходит в ContentView3 - ContentView3: имеет NavigationLink, без заголовка, который направляет пользователей на ContentView2

Однако, когда я настроив вышеуказанный поток, я получаю штабелированные заголовки, когда пользователи go туда и обратно между ContentView2 и ContentView3. Как я могу предотвратить это и иметь только 1 заголовок, когда пользователи go переходят между двумя представлениями? Спасибо!

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")
        }
    }
}

Screenshot of Issue

1 Ответ

1 голос
/ 20 июня 2020

Вам нужен только один NavigationView в root, поэтому здесь исправлены компоненты

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)
    }
}

...