gre*_*rey 4 ios swiftui swiftui-navigationlink swiftui-navigationsplitview swiftui-navigationstack
我正在尝试使用NavigationStack内部NavigationSplitView。
struct ContentView: View {
@State var mainMenu: MenuItem?
@State var subMenu: SubMenuItem?
var body: some View {
NavigationSplitView {
List(MenuItem.allCases, selection: $mainMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
} detail: {
NavigationStack {
List(SubMenuItem.allCases, selection: $subMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
.navigationDestination(for: SubMenuItem.self) { selected in
DetailView(item: selected)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct DetailView: View {
let item: SubMenuItem
var body: some View {
Text(item.id)
}
}
Run Code Online (Sandbox Code Playgroud)
在 Mac 上,我能够很好地导航到DetailView
但在 iPhone 和 iPad 上,我无法导航到DetailView. 我被困在SubMenu了
这是一个已知的错误?或者我的代码有问题吗?
PS我发现这个问题几乎与this类似,但我没有使用多重/嵌套.navigationDestination,我的问题发生在iPhone/iPad上,而不是Mac上。
终于想通了。我使用了NavigationStackwith ,并为每个更改path手动设置了。现在该代码可以在每个平台上运行。pathsubMenu
struct ContentView: View {
@State var mainMenu: MenuItem?
@State var subMenu: SubMenuItem?
@State var path: [SubMenuItem] = []
var body: some View {
NavigationSplitView {
List(MenuItem.allCases, selection: $mainMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
.onChange(of: mainMenu) { _ in
// Reset subMenu selection (optional)
subMenu = nil
}
} detail: {
NavigationStack(path: $path) {
List(SubMenuItem.allCases, selection: $subMenu) { item in
NavigationLink(value: item) {
Text(item.rawValue)
}
}
.navigationDestination(for: SubMenuItem.self) { selected in
DetailView(item: selected)
}
.onChange(of: subMenu) { sm in
// Manually set the path
if let sm {
path = [sm]
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4113 次 |
| 最近记录: |