iOS 17升级后TabBar无法隐藏问题咨询
iOS 17中TabBar隐藏逻辑的变更及修复方案
变更说明
iOS 17对TabView与NavigationStack的工具栏优先级处理做了调整:
- 在iOS 16中,外层
NavigationStack上设置的.toolbar(.hidden, for: .tabBar)可以覆盖内部TabView的系统TabBar显示; - 但iOS 17优化了视图层级的工具栏识别逻辑,
TabView的系统TabBar属于自身专属的工具栏配置,外层容器的设置不再对其生效。
修复方案
方案1:直接为TabView或其子视图设置隐藏
将.toolbar(.hidden, for: .tabBar)直接附加到TabView本身,或者其内部的每个子视图上:
struct LandingView: View { @State var selectedTab = 1 var body: some View { ZStack(alignment: .bottom) { NavigationStack { TabView(selection: $selectedTab) { CreateView() .tag(1) .toolbar(.hidden, for: .tabBar) // 给子视图添加隐藏配置 // 其他子视图同理添加该配置 } .toolbar(.hidden, for: .tabBar) // 或直接给TabView添加,二选一即可 } // 自定义TabBar } } }
方案2:使用页面样式隐藏系统TabBar
如果自定义TabBar完全替代了系统交互,可以给TabView设置页面样式并隐藏指示器,彻底屏蔽系统TabBar:
TabView(selection: $selectedTab) { CreateView() .tag(1) // 其他子视图 } .tabViewStyle(.page(indexDisplayMode: .never))
内容的提问来源于stack exchange,提问作者user22701962
相关产品推荐
相关产品推荐

