视图中的导航栏(Navigation Bar / Title Bar)属于容器视图控制器的UI:
在 UIKit 里,它挂在 UINavigationController 上;
在 AppKit 里,它挂在 NSSplitViewController 或 NSNavigationSplitViewController 上。
SwiftUI 的 NavigationView / NavigationStack 就是这些底层容器的抽象外壳。
只有放在它们里面,SwiftUI 才知道应该把 .toolbar 的内容渲染到导航栏/工具栏区域,而不是普通视图上。

如果直接在一个 Text 上写 .toolbar,SwiftUI 找不到宿主导航容器,就不会显示。

哪些修饰符/组件需要依赖导航容器
可以简单分两类:
1、依赖导航栏区域的修饰符
1).navigationTitle 导航标题
NavigationStack {
Text("这里是首页内容")
.navigationTitle("首页")
}
2).toolbar { … } 工具栏
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button("添加") { ... }
}
}
3).navigationBarTitleDisplayMode(.inline) 导航标题显示样式
.navigationTitle("My App")
.navigationBarTitleDisplayMode(.inline) // 使标题保持小字号
4).navigationBarHidden(true)(旧 API,隐藏视图的导航栏标题)
这些东西本质上就是给“导航栏”加料,所以必须在导航容器里用。
2、依赖导航栈的跳转组件
1)NavigationLink(点了之后要 push 目标)
NavigationLink("Go to Detail View") {
DetailView()
}
2).navigationDestination(for: Type.self) { … }(定义跳转映射)
List(articles) { article in
NavigationLink(value: article) {
Text(article.title)
}
}
.navigationDestination(for: Article.self) { article in
ArticleDetailView(article: article)
}
.navigationDestination(for: Comment.self) { comment in
CommentDetailView(comment: comment)
}
3)NavigationPath导航路径
var path: NavigationPath
NavigationStack(path: $path) { ... }
这些要有“导航栈”才知道往哪儿 push/pop,没有容器就没上下文。
哪些不需要依赖导航容器
普通的布局、按钮、手势、列表之类的和导航容器完全没关系。比如 .sheet、.alert、.popover 这种模态弹出,是直接挂在视图上的,不依赖导航栏。
总结
toolbar 等修饰符之所以必须配合 NavigationView / NavigationStack,是因为它们的内容要渲染到导航容器提供的“特殊 UI 区域”。
凡是涉及导航栏和 push/pop 跳转的组件,都需要包在导航容器里。
其他大多数修饰符和组件则不需要。
扩展文章
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导航栏toolbar标题修饰符navigationBarTitleDisplayMode:https://fangjunyu.com/2025/03/05/swiftui%e5%af%bc%e8%88%aa%e6%a0%8ftoolbar%e6%a0%87%e9%a2%98%e4%bf%ae%e9%a5%b0%e7%ac%a6navigationbartitledisplaymode/
3、macOS分栏控制器NSSplitViewController:https://fangjunyu.com/2025/07/04/macos%e5%88%86%e6%a0%8f%e6%8e%a7%e5%88%b6%e5%99%a8nssplitviewcontroller/
4、SwiftUI在iOS中的toolbar工具栏:https://fangjunyu.com/2024/12/07/swift-toolbar%e5%b7%a5%e5%85%b7%e6%a0%8f/
5、SwiftUI导航视图控件NavigationLink:https://fangjunyu.com/2024/12/11/swiftui%e5%af%bc%e8%88%aa%e8%a7%86%e5%9b%be%e6%8e%a7%e4%bb%b6navigationlink/
6、Swift UI 深入理解NavigationDestination 和 NavigationPath:https://fangjunyu.com/2024/10/11/%e6%96%87%e7%ab%a0%e4%bb%8b%e7%bb%8d/
7、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/