SwiftUI NavigationStack внутри NavigationSplitView не работает на iPhone и iPad
я пытаюсь использовать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)
}
}
}
}
}
struct DetailView: View {
let item: SubMenuItem
var body: some View {
Text(item.id)
}
}
На Mac я могу хорошо ориентироваться в
Но на iPhone и iPad я не могу перейти кDetailView
. я застрял наSubMenu
.
Это известная ошибка? или что-то не так с моим кодом?
PS Я нашел этот вопрос почти похожим на этот , но я НЕ использую несколько/вложенных
.navigationDestination
и моя проблема возникает на iPhone/iPad, а не на Mac.
1 ответ
Наконец-то разобрался. я использовалNavigationStack
с помощью и вручную установитеpath
для каждогоsubMenu
изменять. Теперь код работает на любой платформе.
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]
}
}
}
}
}
}