NavigationSplitView 内的 NavigationLink 内的 NavigationStack 存在问题

问题描述 投票:0回答:1

在新的 SwiftUI mac 应用程序项目中,粘贴以下代码

import SwiftUI

struct ContentView: View {
    @State private var path = [Int]()

    var body: some View {
        NavigationSplitView {
            NavigationLink {
                NavigationStack(path: $path) {
                    VStack {
                        Button("Show 1") {
                            path = [1]
                        }
                    }
                    .navigationDestination(for: Int.self) { selection in
                        Text("You selected \(selection)")
                    }
                }
            } label: {
                Text("sidebar object")
            }
        } detail: {
            Text("detail")
        }
    }
}

运行项目,然后点击侧边栏中的“侧边栏对象”按钮,然后点击“显示1”,会莫名其妙地显示一个黄色警告标记,截图在这里

但是,在询问了一些 AI 并修改了其代码后,我只需用另一个 NavigationStack 包围 Text(“detail”) 即可使其工作,请参阅下面的代码:

import SwiftUI

struct ContentView: View {
    @State private var path = [Int]()

    var body: some View {
        NavigationSplitView {
            NavigationLink {
                NavigationStack(path: $path) {
                    VStack {
                        Button("Show 1") {
                            path = [1]
                        }
                    }
                    .navigationDestination(for: Int.self) { selection in
                        Text("You selected \(selection)")
                    }
                }
            } label: {
                Text("sidebar object")
            }
        } detail: {
            NavigationStack {
                Text("detail")
            }
        }
    }
}

有人可以告诉我这里发生了什么吗?这是正确的做事方式吗?

附注我以前用过 UIKit,不久前才想学习 SwiftUI

macos swiftui
1个回答
0
投票

第二个代码修复: • 第二个代码在详细信息部分的Text("detail") 周围添加一个NavigationStack。 • 这确保了详细信息部分由NavigationStack 管理,为导航和状态管理提供必要的上下文。 • 通过在详细信息部分添加NavigationStack,可以正确维护和观察导航状态(路径),从而使导航能够按预期工作。 主要区别: • 主要区别在于第二个代码中的详细信息部分包含在NavigationStack 中,确保正确处理导航上下文。这为导航提供了一致且可预测的行为,因为 NavigationStack 管理路径和目的地。

希望对你有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.