我正在尝试更新一个旧的应用程序来使用新的NavigationSplitView和NavigationLink,但是当侧边栏有一个子对象的层次结构时,我试图用正确的方法来处理这个问题,并且我想从一个遥远的子对象中更新细节视图。例如,基于WWDC2022示例项目“导航指南”,我尝试了以下操作,但没有成功:
TestApp.swift
@main
struct TestApp: App {
@StateObject var appState = AppState()
var body: some Scene {
WindowGroup {
NavigationSplitView {
ProjectListView()
} detail: {
if let chapter = appState.chapter {
ChapterDetailView(chapter: chapter)
} else {
Text("Pick a Chapter")
}
}
}
}
}ChapterListView.swift < ProjectListView()的远程(3层以下)兄弟姐妹
List(selection: $appState.chapter) {
ForEach(chapters) { chapter in
NavigationLink(chapter.title ?? "A Chapter", value: chapter)
}
}appState.swift
class AppState: ObservableObject {
@Published var chapter: Chapter?
}我确信我只是不了解导航新方法的基本原理。是的,我的目标是iOS16
发布于 2022-06-12 16:01:55
这是beta 1中已知的一个错误。要解决这个问题,细节部分中的逻辑需要包装在ZStack中。在发布说明中:
NavigationSplitView列中的条件视图无法更新某些状态更改。(91311311)解决办法:将列的内容包装在ZStack中。如果更改为以下内容,TestApp可以工作:
@main
struct TestApp: App {
@StateObject var appState = AppState()
var body: some Scene {
WindowGroup {
NavigationSplitView {
ProjectListView()
} detail: {
// Wrap in a ZStack to fix this bug
ZStack {
if let chapter = appState.chapter {
ChapterDetailView(chapter: chapter)
} else {
Text("Pick a Chapter")
}
}
}
}
}
}https://stackoverflow.com/questions/72586747
复制相似问题