iOS 15下使用SwiftUI如何在指定视图中隐藏TabBar?
失效原因
iOS15 调整了 NavigationView 的导航栈层级识别逻辑,原本使用的「外层 NavigationView 包裹 TabView,Tab 子页面内部再嵌套 NavigationView」的结构不再被系统识别为同一个导航栈,因此跳转后 TabBar 不会自动隐藏。
可行解决方案
方案1:调整导航层级结构(推荐,兼容iOS14+)
按照 SwiftUI 官方规范调整结构,把 TabView 作为根容器,每个 Tab 对应的子页面单独管理自身的导航栈,不需要在外层套 NavigationView,调整后跳转自动隐藏 TabBar 的逻辑可在全版本正常生效。
示例代码如下:
// 根视图结构 TabView{ View1().tabItem { Image(systemName: "house.fill") Text("Home") } // 其余Tab页按相同规则添加即可 } // View1 代码无需修改 struct View1: some View { var body: some View { NavigationView{ NavigationLink(destination: Text("New Page without the Tabbar")) { Text("Link") } } } }
方案2:手动控制TabBar隐藏(适配iOS15+,无需修改原有结构)
如果业务逻辑不允许调整原有层级结构,可以直接在跳转的目标页面添加 toolbar 修饰符手动隐藏 TabBar:
struct View1: some View { var body: some View { NavigationView{ NavigationLink(destination: Text("New Page without the Tabbar") // 新增此行隐藏TabBar .toolbar(.hidden, for: .tabBar) ) { Text("Link") } } } }
如果需要同时兼容iOS14,可以增加版本判断:
NavigationLink(destination: Text("New Page without the Tabbar") .apply { if #available(iOS 15, *) { $0.toolbar(.hidden, for: .tabBar) } } ) { Text("Link") } // 通用扩展,方便添加条件修饰符 extension View { func apply<T: View>(@ViewBuilder block: (Self) -> T) -> some View { block(self) } }
内容的提问来源于stack exchange,提问作者Boothosh81
相关产品推荐
相关产品推荐

