如果堆栈大小 > 1,则 SwiftUI3 导航链接在弹出后不起作用

问题描述

SwiftUI 3 如果堆栈大小 > 1,则弹出后导航链接不起作用

重现步骤:

  1. 启动应用
  2. 点按列表 #1 中的任意行
  3. 点按列表 #2 中的任意行
  4. 点按 Back
  5. 点按列表 #2 中的任意行

结果:什么都没有发生,导航链接不起作用 预期结果:我应该再次看到视图控制器 #3。

navigation-issue-demo-gif

不过在 SwiftUI 2 中运行良好。

有人能够在 Swift UI 3 中使嵌套的 NavigationLinks 工作吗?我已向 Apple 提交错误报告。

import SwiftUI

@main
struct NavigationTestApp: App {
    var body: some Scene {
        WindowGroup {
            FirstView()
        }
    }
}

struct FirstView: View {
    var body: some View {
        NavigationView {
            List {
                ForEach(0..<10) { i in
                    NavigationLink(destination: SecondView()) {
                        Text("Row \(i)")
                            .padding()
                    }
                }
            }
            .navigationTitle(Text("1"))
        }
    }
}

struct SecondView: View {
    var body: some View {
        List {
            ForEach(0..<10) { i in
                NavigationLink(destination: ThirdView()) {
                    Text("Child \(i)")
                        .padding()
                }
            }
        }
        .navigationTitle(Text("2"))
    }
}

struct ThirdView: View {
    var body: some View {
        vstack {
            Text("?")
        }
        .navigationTitle(Text("3"))
    }
}

解决方法

正如@loremipsum 所说,这是一个已知问题

https://github.com/bregydoc/bcidatasetIV2a

SwiftUI 已知问题 从导航堆栈中的第三个屏幕弹出后,您无法推送到第三个屏幕。 (79076444)