.navigationBarHidden(true) 是 SwiftUI 里一个旧式修饰符,用来隐藏当前视图的导航栏(Navigation Bar)。
基本用法
NavigationView {
Text("内容")
.navigationTitle("首页")
.navigationBarHidden(true)
}
效果:虽然设置了标题,但导航栏整个会被隐藏掉,页面上只剩下纯内容。
历史背景
1、.navigationBarHidden(true)
这是UIKit 时代(UINavigationController)留下来的修饰符,SwiftUI 早期也沿用了。
作用:隐藏整个 Navigation Bar(导航栏),也就是包括标题 (navigationTitle)、返回按钮、工具栏按钮等,整条导航栏都会消失。
缺点:这是 UIKit 的桥接 API,在 iOS 16+ 中已经不推荐使用,Apple 建议用 .toolbar(.hidden, for: .navigationBar) 来替代。
2、.toolbar(.hidden, for: .navigationBar)
这是 SwiftUI 原生的控制导航栏可见性的方式。
作用:同样是隐藏整个 Navigation Bar,效果和 .navigationBarHidden(true) 基本一样。
优点:这是推荐写法,API 更清晰,能明确指定要隐藏的是 .navigationBar。
新推荐的替代方式
在 NavigationStack 下,如果要隐藏标题/导航栏,用 .toolbar 配合 .hidden() 更合适:
NavigationStack {
Text("内容")
.toolbar(.hidden, for: .navigationBar)
}
这样写的好处:
更明确地告诉系统“隐藏的是 navigationBar”,而不是全局模糊隐藏。
还能更细粒度地控制:
.toolbar(.hidden, for: .tabBar / .bottomBar / .navigationBar)
可以针对不同的系统栏位隐藏。
注意事项
1、不要混用
在 NavigationStack 里再写 .navigationBarHidden(true) 可能不会生效,或者出现警告。
2、和全屏视图搭配
如果做登录页、欢迎页,不想要导航栏,推荐直接用 .toolbar(.hidden, for: .navigationBar),更干净。
3、影响返回手势
隐藏导航栏后,系统返回手势(左滑返回)仍然可用,但用户可能会不知所措,因为看不到返回按钮。要考虑用户体验。