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