gpt4 book ai didi

SwiftUI:如何使用 iOS16/iPadOS16 NavigationSplitView 和 NavigationLink 更新远程子项的详细信息列

转载 作者:行者123 更新时间:2023-12-05 02:28:38 28 4
gpt4 key购买 nike

我正在尝试更新一个较旧的应用程序以使用新的 NavigationSplitView 和 NavigationLink,但是当侧边栏具有子对象的层次结构并且我想更新详细 View 时,我试图围绕正确的方法来做这件事来自远处的子物体。例如,基于 WWDC2022 示例项目 Navigation Cookbook,我尝试了以下方法但没有成功:

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 < A distant (3 levels down) sibling of ProjectListView()

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

最佳答案

这是 beta 1 中的一个已知错误。要解决此问题,需要将细节部分中的逻辑包装在 ZStack 中。来自发行说明:

NavigationSplitView 列中的条件 View 无法根据某些状态更改进行更新。 (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")
}
}
}
}
}
}

关于SwiftUI:如何使用 iOS16/iPadOS16 NavigationSplitView 和 NavigationLink 更新远程子项的详细信息列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72586747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com