SwiftUI NavigationView保留返回按钮时移除导航栏空白

需求
移除二级导航视图中返回按钮下方的系统预留空白区域。
已验证无效的方案
以下两种常规写法均无法消除该空白:
- 隐藏导航栏+空标题
.navigationBarTitle("") .navigationBarHidden(true)
- 行内模式空标题
.navigationBarTitle("", displayMode: .inline)
问题复现Demo
struct SecondNavView: View { let item: String var body: some View { ZStack { Color.red Text(item) } } } struct FirstNavView: View { let listItems = ["One", "Two", "Three"] var body: some View { NavigationView { List(listItems, id: \.self) { item in NavigationLink(destination: SecondNavView(item: item)) { Text(item).font(.headline) } } } } }
解决方案
空白是系统为导航栏大标题模式预留的顶部占位,常规隐藏导航栏的方式不会清除该占位。
直接在二级页面SecondNavView的根视图上添加以下修饰符即可:
.navigationBarTitleDisplayMode(.inline) .toolbarBackground(.hidden, for: .navigationBar)
如果需要兼容iOS 15以下系统,可在App启动入口处通过UIAppearance全局配置导航栏透明属性:
let navBarAppearance = UINavigationBarAppearance() navBarAppearance.configureWithTransparentBackground() UINavigationBar.appearance().standardAppearance = navBarAppearance UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
注意:不要在导航根视图上添加导航栏隐藏相关修饰符,否则会破坏导航跳转逻辑、导致返回手势或返回按钮显示异常。
内容的提问来源于stack exchange,提问作者frpa74
相关产品推荐
相关产品推荐

