NavigationSplitView详情页NavigationLink破坏导航栈层级问题求助
问题出在你初始给detail区域直接设置了ThirdView,这个视图并没有纳入detail面板的导航栈中,后续从它跳转的视图自然没有上级栈可以返回。
最优解决方案:
- 修改初始detail视图为占位内容,不要直接放
ThirdView,让从SecondView导航过来的ThirdView自动进入detail的导航栈:
NavigationSplitView { FirstView() } content: { SecondView() } detail: { Text("选择一个项目查看详情") .navigationTitle("详情") .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color(.systemBackground)) }
- 保持SecondView的NavigationLink不变,SwiftUI会自动将
ThirdView推入detail面板的导航栈:
struct SecondView: View { var body: some View { List(myData, id: \.id) { item in NavigationLink(destination: ThirdView(item: item)) { ItemCellView(item: item) } } } }
- ThirdView中的NavigationLink正常使用,此时它会在detail的导航栈中继续推入下一级视图,返回按钮会自动显示:
struct ThirdView: View { let item: ItemType var body: some View { NavigationLink(destination: EvenMoreDetailedView(item: item)) { Label("更多详情", systemImage: "info") } .navigationTitle(item.name) } }
原理说明:
NavigationSplitView的content到detail的导航会自动维护detail区域的导航栈,当你初始直接在detail放视图时,这个视图不在栈内,跳转后无法回溯。换成占位视图后,所有detail的内容都通过导航栈推入,层级关系清晰,返回按钮会由SwiftUI自动管理,无需手动添加。
内容的提问来源于stack exchange,提问作者arroyot24
相关产品推荐
相关产品推荐

