【发布时间】:2022-08-10 14:38:36
【问题描述】:
我正在使用 ipadOS16/macOS13 中提供的新导航 API,但在确定如何在 macOS 13 上将 NavigationSplitView、NavigationStack 和 NavigationLink 组合在一起时遇到了一些麻烦(在 Macbook Pro M1 上测试)。相同的代码在 ipadOS 上也能正常工作。
我正在使用两列 NavigationSplitView。在 \'detail\' 部分中,我有一个包含在 NavigationStack 中的 SampleModel1 实例列表。在列表中,我已经为 SampleModel1 和 SampleModel2 实例应用了 navigationDestination。
当我从列表中选择一个SampleModel1 实例时,我导航到一个详细视图,该视图本身包含一个SampleModel2 实例列表。我的意图是在单击 SampleModel2 实例之一时进一步导航到 NavigationStack 中,但不幸的是这似乎不起作用。 SampleModel2 实例是可选择的,但没有发生导航。
当我完全删除 NavigationSplitView 并仅使用 NavigationStack 时,问题确实存在不是出现,我可以成功导航到SampleModel2 实例。
这是我的示例代码:
// Sample model definitions used to trigger navigation with navigationDestination API.
struct SampleModel1: Hashable, Identifiable {
let id = UUID()
static let samples = [SampleModel1(), SampleModel1(), SampleModel1()]
}
struct SampleModel2: Hashable, Identifiable {
let id = UUID()
static let samples = [SampleModel2(), SampleModel2(), SampleModel2()]
}
// The initial view loaded by the app. This will initialize the NavigationSplitView
struct ContentView: View {
enum NavItem {
case first
}
var body: some View {
NavigationSplitView {
NavigationLink(value: NavItem.first) {
Label(\"First\", systemImage: \"house\")
}
} detail: {
SampleListView()
}
}
}
// A list of SampleModel1 instances wrapped in a NavigationStack with multiple navigationDestinations
struct SampleListView: View {
@State var path = NavigationPath()
@State var selection: SampleModel1.ID? = nil
var body: some View {
NavigationStack(path: $path) {
List(SampleModel1.samples, selection: $selection) { model in
NavigationLink(\"\\(model.id)\", value: model)
}
.navigationDestination(for: SampleModel1.self) { model in
SampleDetailView(model: model)
}
.navigationDestination(for: SampleModel2.self) { model in
Text(\"Model 2 ID \\(model.id)\")
}
}
}
}
// A detailed view of a single SampleModel1 instance. This includes a list
// of SampleModel2 instances that we would like to be able to navigate to
struct SampleDetailView: View {
var model: SampleModel1
var body: some View {
Text(\"Model 1 ID \\(model.id)\")
List (SampleModel2.samples) { model2 in
NavigationLink(\"\\(model2.id)\", value: model2)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
-
我在 macOS 上的 beta 3 中遇到了类似的问题(根据 Asperi 的回答,我在 iPad 上可以正常工作)。我让它在 beta 2 中工作,但迁移到 b3 似乎已经破坏了它。
标签: swift swiftui swiftui-navigationsplitview macos-ventura