用途:为 SwiftUI 应用提供导航架构指南,覆盖 iOS 16+/macOS 13+ 的现代导航 API,适用于构建或审查导航架构、排查导航问题(栈不更新、返回按钮异常、状态丢失)、深链接接入导航、以及选择导航方案。
主要能力:提供容器选型决策树。扁平分区(3-5 个顶层区域)用 TabView;层级下钻用 NavigationStack;侧边栏加内容用 NavigationSplitView(两列或三列);组合场景用 TabView 每页配 NavigationStack,或 NavigationSplitView 详情列内嵌 NavigationStack。
参考文件与要点:navigation-stack.md 涵盖 NavigationStack、NavigationLink(value:)、navigationDestination;navigation-split-view.md 涵盖两/三列布局、NavigationSplitViewVisibility、自适应行为;tab-view.md 涵盖 TabView、iOS 18 可定制 Tab 与侧边栏模式;programmatic-navigation.md 涵盖 NavigationPath、pop-to-root(path = NavigationPath())、状态恢复(CodableRepresentation)、协调器;navigation-transitions.md 涵盖 iOS 18 的 .navigationTransition(.zoom) 与自定义 NavigationTransition。
设计规则:标签栏承载顶层内容类别并均衡功能;不要在另一个标签操作时自动切换标签,应原地确认。Push(右到左)表示层级遍历,Modal(上滑,覆盖标签栏属设计)表示独立任务;限制模态叠加层级。导航栏标题表示当前位置,返回按钮显示上一屏标题。
三种配方:可推入栈用 NavigationStack(path:) 加 NavigationLink(value:) 加 .navigationDestination(for:);多列无栈用 NavigationSplitView 配合各前列 List(selection:);分栏加栈用于详情列内嵌 NavigationStack。建议即使 iPhone 优先也用 NavigationSplitView,紧凑宽度会自动折叠。每个容器仅一个绑定 path/selection 作为单一事实源。状态恢复用 @SceneStorage("navigation") 加 .task 在出现时恢复一次。
常见错误:使用已弃用的 NavigationView;用 NavigationLink(destination:) 而非值链接加 navigationDestination;把 NavigationStack 放在 NavigationSplitView 的侧边栏/内容列(栈只能位于详情列);在懒加载容器内附加 navigationDestination;缺少值类型的 destination 注册;NavigationPath 不是 @State 或作用域错误;多个 NavigationStack 争用同一导航上下文;硬编码导航;未通过导航系统处理深链接。
限制:资料未提供具体代码安装命令、收费或性能数据,暂未提供。