NavigationLink 只工作一次

C.A*_*lar 100 navigation xcode ios swiftui navigationlink

我正在开发一个登录应用程序,登录后列出了类别。在每个类别下都有一些水平列出的项目。事情是登录后,主页面出现,一切都列出来了。当您单击一个项目时,它会进入详细屏幕,但是当您尝试返回时,它只会崩溃。我发现了这个流程为什么我的 SwiftUI 应用程序在“NavigationView”中的“navigationBarItems”内放置“NavigationLink”后向后导航时会崩溃?但我无法解决我的问题。由于我的项目变得复杂,我只想在swiftui中练习导航并创建了一个新项目。顺便说一下,我下载了最新的 xcode 版本 11.3。我写了一个简单的代码如下:

NavigationView{
        NavigationLink(destination: Test()) {
            Text("Show Detail View")
        }
    .navigationBarTitle("title1")
Run Code Online (Sandbox Code Playgroud)

而 Test() 视图如下:

import SwiftUI

struct Test: View {
    var body: some View {
        Text("Hello, World!")
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这非常简单。我也在互联网上尝试过类似的例子,但它并没有像它想象的那样工作。当我运行该项目时,我单击导航链接并导航到 Test() 视图。然后我点击后退按钮,它导航到主页。但是,当我第二次单击导航链接时,没有任何反应。导航链接只工作一次,之后什么也没有发生。它不导航,也不抛出任何错误。我是 swiftui 的新手,除了导航之外,一切都很棒。我在互联网上尝试了很多示例和建议的解决方案,但似乎没有任何解决方案可以解决我的问题。

Sag*_*age 64

[更新] 2020 年 11 月 5 日 - pawello2222表示此问题已在 Xcode 12.1 中修复。


[更新] 2020 年 6 月 14 日 - Quang Hà表示此问题已在 Xcode 11.5 中重现。


[更新] 2020 年 2 月 12 日 - 我在 Xcode 11.4 beta 中检查了此问题,发现此问题已解决。


当我在 Xcode 的模拟器中测试它时,我在我的项目中也遇到了同样的问题。但是,当我在真实设备(带有 iOS 13.3 的 iPhone X)上启动该应用程序时,NavigationLink它运行良好。所以,它确实看起来像是 Xcode 的错误。

  • 对我来说完全一样。我开始后悔选择 Swiftui 作为新应用程序 (19认同)
  • 我刚刚花了 4 个小时,感觉很愚蠢......这个东西还没有准备好生产...... (14认同)
  • [更新] 2020年2月12日 - 我在 Xcode 11.4 beta 中检查了这个问题,发现这个问题已经解决。 (3认同)

Vic*_*rov 8

模拟器 11.4:此问题已修复

您需要isActive在第二个视图中重置默认值。它适用于设备和模拟器。

struct NavigationViewDemo: View {
    @State var isActive = false

    var body: some View {
        NavigationView {
            VStack {
                Text("View1")
                NavigationLink(
                    destination: NavigationViewDemo_View2(isActive: $isActive),
                    isActive: $isActive,
                    label: { Button(action: { self.isActive = true }, label: { Text("click") }) })
            }
        }
    }
}

struct NavigationViewDemo_View2: View {
    @Binding var isActive: Bool

    var body: some View {
        Text("View2")
            .navigationBarItems(leading: Button(action: { self.isActive = false }, label: { Text("Back") }))
    }
}
Run Code Online (Sandbox Code Playgroud)