SwiftUI导航NavigationView
SwiftUI导航NavigationView

SwiftUI导航NavigationView

NavigationView 是 SwiftUI 最早的一代导航容器,它的定位和 UIKit 的 UINavigationController 有点类似,用来承载“层级式导航”(push/pop)。

不过要注意:它现在已经算是“老 API”,Apple 在 iOS 16 推出了新的 NavigationStack 来替代它。

核心功能

1、容器

把一个视图放进 NavigationView 里,它会自动带上导航栏(标题栏)。

在 iPhone 上表现为顶部导航条;在 iPad/macOS 上会变成 Split View(侧边栏 + 内容区)。

NavigationView {
    Text("首页")
        .navigationTitle("主页")
}

2、配合 NavigationLink 使用

跳转用 NavigationLink,它会把目标页面 push 到导航栈里。

栈由系统管理,只能一步一步 push 和返回。

NavigationView {
    List(0..<5) { i in
        NavigationLink("跳到详情 \(i)", destination: Text("详情页 \(i)"))
    }
    .navigationTitle("列表")
}

逻辑图:

3、双栏/三栏布局(在 iPad 和 macOS 上)

NavigationView 有个特别的地方:如果在里面放多个子视图,它会自动变成 Split View(比如左边侧边栏、右边详情页)。

例如:

NavigationView {
    Color.red
    Color.blue
}

在 iPad 上就会自动分栏。

4、状态管理不透明

它自己内部管理 push/pop,开发者没法直接修改导航栈。

想要做“恢复导航状态”或者“跳到第三级页面”几乎是不可能的。

和 NavigationStack 的区别

NavigationView

老的,隐式导航,系统自己管栈。

写法直观,但灵活性差。

在 iPad/macOS 上会自动变 Split View,行为有点诡异。

NavigationStack

新的(iOS 16+),显式导航,开发者自己管理栈(path)。

数据驱动,可以恢复导航状态、一次性跳多级。

行为更统一,不会因为设备不同而突然变布局。

总结

NavigationView 是 SwiftUI 里“旧式导航”,简单,但受限多。

NavigationStack 是它的继任者,更现代、更可控。

如果是新项目,Apple 推荐直接用 NavigationStack。

toolbar、navigationTitle等修饰符都依赖导航容器使用。

扩展文章

1、SwiftUI导航栏标题navigationTitle:https://fangjunyu.com/2025/09/12/swiftui%e5%af%bc%e8%88%aa%e6%a0%8f%e6%a0%87%e9%a2%98navigationtitle/

2、SwiftUI在iOS中的toolbar工具栏:https://fangjunyu.com/2024/12/07/swift-toolbar%e5%b7%a5%e5%85%b7%e6%a0%8f/

3、SwiftUI隐藏导航栏:https://fangjunyu.com/2025/09/12/swiftui%e9%9a%90%e8%97%8f%e5%af%bc%e8%88%aa%e6%a0%8f%e6%a0%87%e9%a2%98/

4、SwiftUI导航容器的修饰符/组件:https://fangjunyu.com/2025/09/12/swiftui%e5%af%bc%e8%88%aa%e5%ae%b9%e5%99%a8%e7%9a%84%e4%bf%ae%e9%a5%b0%e7%ac%a6-%e7%bb%84%e4%bb%b6/

5、SwiftUI导航NavigationStack:https://fangjunyu.com/2025/09/12/swiftui%e5%af%bc%e8%88%aanavigationstack/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注