You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 09:15:02