Проблема NavigationView с выбором «Форма» внутри дочернего элемента NavigationLink

#swiftui #swiftui-navigationlink #swiftui-navigationview #swiftui-form #swiftui-picker

Вопрос:

У меня возникли проблемы с тем, чтобы поместить мой выбор в дочернюю структуру NavigationLink. Моя задача, как вы видите, после некоторого перехода (Главная страница -> Страница тестирования ->> Сборщик) и выбора любого варианта выбора, который мне нужен, он возвращает меня на страницу тестирования, но сам сборщик остается серым. Я знаю, что это можно решить, добавив NavigationView{} дочернюю навигационную ссылку внутри, но это вызывает другую проблему, потому что у меня уже есть NavigationView{} предок верхнего уровня. Другая
проблема_1 Другая проблема_2

Код:

 import SwiftUI


struct ContentView: View {
    var body: some View {
        NavigationView {
            List{
            NavigationLink(destination: page2()) {
                Text("Food input")
            }
            NavigationLink(destination: page3()) {
                Text("Тesting page")
            }
            }
            .navigationBarTitle("Main page")
        }
    }
}

struct page3: View {
    @State private var selectedFlavor = Flavor.chocolate
    enum Flavor: String, CaseIterable, Identifiable {
        case chocolate
        case vanilla
        case strawberry

        var id: String { self.rawValue }
    }
    var body: some View {
        NavigationView {
            Form {
                Section {
                    Picker("Flavor", selection: $selectedFlavor) {
                        Text("Chocolate").tag(Flavor.chocolate)
                        Text("Vanilla").tag(Flavor.vanilla)
                        Text("Strawberry").tag(Flavor.strawberry)
                    }
                    Text("Selected flavor: (selectedFlavor.rawValue)")
                }
            }
        }
    }
}
 

ОБНОВЛЕНИЕ:
Узнайте, что моя консоль пытается сказать мне: «Возврат пустой, отключенной функции UIBarButtonItem для выполнения ненулевого контракта»
Я не знаю, что именно это означает, но я нашел странное решение:

 .navigationViewStyle(StackNavigationViewStyle())
 

Документация Apple ничего об этом не говорит, но если вы настроите ее так:

 struct ContentView: View {
    var body: some View {
        NavigationView {
            List{
            NavigationLink(destination: page2()) {
                Text("Food input")
            }
            NavigationLink(destination: page3()) {
                Text("Тesting page")
            }
            }
            .navigationBarTitle("Main page")
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}
 

Все проблемы исчезнут. Пожалуйста, объясните мне, как это работает, я действительно застрял в этом.

Ответ №1:

 struct ContentView: View {
    var body: some View {
        NavigationView {
            List{
            NavigationLink(destination: page2()) {
                Text("Food input")
            }
            NavigationLink(destination: page3()) {
                Text("Тesting page")
            }
            }
            .navigationBarTitle("Main page")
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}