首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI:如何使用iOS16 16/iPadOS16 16 NavigationSplitView和NavigationLink更新远程子列的详细信息列

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

Stack Overflow用户
提问于 2022-06-11 17:59:43
回答 1查看 364关注 0票数 3

我正在尝试更新一个旧的应用程序来使用新的NavigationSplitView和NavigationLink,但是当侧边栏有一个子对象的层次结构时,我试图用正确的方法来处理这个问题,并且我想从一个遥远的子对象中更新细节视图。例如,基于WWDC2022示例项目“导航指南”,我尝试了以下操作,但没有成功:

TestApp.swift

代码语言:javascript
复制
@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层以下)兄弟姐妹

代码语言:javascript
复制
List(selection: $appState.chapter) {
  ForEach(chapters) { chapter in
    NavigationLink(chapter.title ?? "A Chapter", value: chapter)
  }
}

appState.swift

代码语言:javascript
复制
class AppState: ObservableObject {
  @Published var chapter: Chapter?
}

我确信我只是不了解导航新方法的基本原理。是的,我的目标是iOS16

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-12 16:01:55

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

NavigationSplitView列中的条件视图无法更新某些状态更改。(91311311)解决办法:将列的内容包装在ZStack中。如果更改为以下内容,TestApp可以工作:

代码语言:javascript
复制
@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")
        }
       }
      }
    }
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72586747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档