如何修复 Xcode 14 警告:呈现值的 NavigationLink 必须出现在基于 NavigationContent 的 NavigationView 内。链接将被禁用

xan*_*uck 17 swiftui swiftui-navigationlink swiftui-navigationview ios16 xcode14

自从安装 Xcode 14 以来,我现在在控制台中打印以下错误消息:

呈现值的 NavigationLink 必须出现在基于 NavigationContent 的 NavigationView 内。链接将被禁用。

我的应用程序的结构如下:

  1. 我将视图 A 包裹在导航视图中。导航视图内部有一个链接到视图 B 的导航链接。

  2. 我的视图 B 没有导航视图,但有一个指向视图 C 的导航链接。视图 B 继承了视图 A 中定义的导航视图

当我按下视图 B 上的后退按钮,弹出回视图 A 时,会打印警告。当我将视图 B 包装在导航视图中时,警告消失,但这当然现在在两个导航视图中显示视图 B,这不是什么我想。

我不确定为什么会打印此警告,因为视图 ​​B 继承了视图 A 中定义的 NavigationView。

小智 16

我遇到过同样的问题。添加对 iOS16 的检查并使用新的导航堆栈(如果为 true)为我解决了这个问题。

WindowGroup {
    if #available(iOS 16.0, *) {
        NavigationStack {
            ContentView()
        }
    } else {
        // Fallback on earlier versions
        NavigationView {
            ContentView()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*kyi 9

尝试添加.navigationViewStyle(.stack)NavigationView. 这对我的情况有帮助。

NavigationView {
    // View A
}
.navigationViewStyle(.stack)
Run Code Online (Sandbox Code Playgroud)


cmd*_*elp 1

在ios16中将被弃用,这里提供了官方文档链接,可以查看具体详情

已弃用

请改用 NavigationStack 和 NavigationSplitView。有关更多信息,请参阅迁移到新的导航类型。

https://developer.apple.com/documentation/swiftui/navigationview