【问题标题】:NavigationLink in SwiftUI not working anymoreSwiftUI 中的 NavigationLink 不再工作
【发布时间】:2021-06-02 20:34:11
【问题描述】:

我正在创建一个应用程序并在 Swift/SwiftUI 中使用 NavigationLink,但它不再工作了。我现在不知道什么时候了,但是两三个星期前,一切都很好。 NavigationLinks 已经在代码中更长的时间,工作正常。但是今天我用了新的,它们不起作用。如果它们被禁用或其他东西,它会在模拟器和真实设备上查看。它们是灰色的,你不能点击它们,或者如果你点击它们,什么也不会发生。有什么解决办法吗?

import SwiftUI

struct MedikamenteView: View {
    var body: some View {
        Form {
            NavigationLink(
                destination: ASSView(),
                label: {
                    Text("ASS")
                })
            NavigationLink(
                destination: AdrenalinView(),
                label: {
                    Text("Adrenalin")
                })
        }
    }
}

struct MedikamenteView_Previews: PreviewProvider {
    static var previews: some View {
        MedikamenteView()
    }
}

例如,这个工作正常:

import SwiftUI

struct RechtView: View {
    var body: some View {
        Form {
           NavigationLink(
            destination: ParagraphenView(),
            label: {
                Text("Paragraphen")
            })
            NavigationLink(
                destination: AufklaerungEinwilligungView(),
                label: {
                    Text("Die Aufklärung mit nachfolgender Einwilligung")
                })
            NavigationLink(
                destination: NotSanGView(),
                label: {
                    Text("Wichtiges aus dem NotSanG")
                })
        }
        .navigationTitle("Recht")
    }
}

struct RechtView_Previews: PreviewProvider {
    static var previews: some View {
        RechtView()
    }
}

【问题讨论】:

  • 您需要在 NavigationView 中有 navigationLink。我通过在 NavigationView 中添加进行了测试,它可以正常工作,否则它就像你提到的那样被禁用。
  • 如果我添加一个 NavigationView 它正在工作,你是对的。但是从什么时候开始我必须添加这个?在我的其他代码示例中,没有 NavigationView,但它仍在工作
  • RechtView 的父视图是什么样的?如果它包含NavigationView,那么RechtViewNavigationView 内,您的链接将有效。如果您追溯视图层次结构,我相信您会在某处找到NavigationView,这将是不同的。

标签: ios swift swiftui swiftui-navigationlink


【解决方案1】:

您必须在NavigationView{} 中使用NavigationLinks。 没有它 NavigationLink 将无法工作。 试试这个:

import SwiftUI

struct MedikamenteView: View {
    var body: some View {
        NavigationView {
            Form {
                NavigationLink(
                    destination: ASSView(),
                    label: {
                        Text("ASS")
                    })
                NavigationLink(
                    destination: AdrenalinView(),
                    label: {
                        Text("Adrenalin")
                    })
            }
        }
        
    }
}

struct MedikamenteView_Previews: PreviewProvider {
    static var previews: some View {
        MedikamenteView()
    }
}

您的第二个代码示例可能是从使用 NavigationView {} 的先前视图加载的

【讨论】:

  • 你说得对,谢谢!它解决了我的问题,你是对的,在第二个示例中是上一个视图中的 NavigationView。昨天是我的坏事。
【解决方案2】:

我可以从 cmets 中看到,您发现它只能在 NavigationView 中工作,现在想知道为什么。重要的是您的视图嵌入在视图层次结构正上方的NavigationView 中。例如,这段代码可以工作:

struct FirstView: View {
    var body: some View {
        NavigationView {
           NavigationLink(label: "Go to next view", destination: NextView())
        }
    }
}

struct NextView: View {
...

虽然这不会:

struct FirstView: View {
    @State var modalPresented = false
    var body: some View {
        NavigationView {
            Button("Show fullscreen cover"){
                modalPresented = true
            }
        }
            .fullScreenCover(isPresented: $modalPresented, content: SecondView())
    }
}

struct SecondView: View {
    var body: some View {
        NavigationLink(label: "Go to next view", destination: NextView())
        // Doesn't work because the view is in a fullScreenCover and therefore not a part of the NavigationView.
    }
}

【讨论】:

  • 非常感谢!它有效,你是对的,在我的另一个例子中,上面的层次结构中有一个 NavigationView。
猜你喜欢
  • 1970-01-01
  • 2020-12-16
  • 2021-01-31
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
相关资源
最近更新 更多