【问题标题】:NavigationView issue with "Form" Picker inside NavigationLink childNavigationLink 子项中的“表单”选择器的 NavigationView 问题
【发布时间】:2021-08-16 06:47:45
【问题描述】:

我在尝试将 Picker 放入 NavigationLink 子结构时遇到了麻烦。 MyProblem 正如您在一些过渡(主页 -> 测试页面 -> 选择器)并选择任何选择器所需的选项后看到的那样,它会将我导航回测试页面,但选择器本身保持灰色。我知道可以通过在 NavigationLink 子项中添加 NavigationView{} 来解决它,但这会导致另一个问题,因为我在顶级祖先中已经有 NavigationView{}AnotherProblem_1 AnotherProblem_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())
    }
}

所有问题都会消失。请解释一下它是如何工作的,我真的很坚持。

【问题讨论】:

    标签: swiftui swiftui-navigationlink swiftui-navigationview swiftui-form swiftui-picker


    【解决方案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())
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 2019-12-08
      • 2023-04-05
      相关资源
      最近更新 更多