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

Swift:如何在导航栈内视图控制器跳转时隐藏Tab Bar?

解决方案:Push跳转时隐藏TabBar,同时保留返回按钮

你遇到的问题其实很常见,核心是既要保留导航栈的返回逻辑(自带返回按钮),又要在详情页隐藏底部TabBar。模态跳转之所以没有返回按钮,是因为它会创建一个独立的导航上下文,而push跳转是在原导航栈中添加页面,天然自带返回按钮,只要做一点小配置就能隐藏TabBar。下面给你两种具体实现方式:

方式1:通过Segue跳转时配置

如果你是用Storyboard里的Show Segue连接Cell和InvoiceDetailVC,只需要在InvoiceVC的prepare(for segue:sender:)方法里给目标控制器设置hidesBottomBarWhenPushed属性:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "你的Segue标识符" {
        if let detailVC = segue.destination as? InvoiceDetailVC {
            // 关键配置:跳转后隐藏底部TabBar
            detailVC.hidesBottomBarWhenPushed = true
        }
    }
}

这样跳转后,InvoiceDetailVC底部的TabBar会自动隐藏,同时导航栏上会保留默认的返回按钮,点击就能回到InvoiceVC,此时TabBar又会重新显示(包括原来的红色角标)。

方式2:纯代码Push跳转

如果是用代码手动push跳转(比如在tableView(_:didSelectRowAt:)方法里),直接在push前设置目标VC的属性即可:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    
    let detailVC = InvoiceDetailVC() // 或者从Storyboard实例化
    detailVC.hidesBottomBarWhenPushed = true
    navigationController?.pushViewController(detailVC, animated: true)
}

额外说明

  • 为什么这个属性有效?hidesBottomBarWhenPushed是UIViewController的自带属性,只要在push前设置为true,当该控制器被推入导航栈时,底部的TabBar会自动隐藏;当从该控制器pop回来时,TabBar又会自动恢复显示,完全不需要手动控制显示/隐藏状态。
  • 关于红色角标:这个配置不会影响InvoiceVC的TabBar角标,返回后角标会正常显示,符合你的需求。

如果之前尝试模态跳转后想保留返回按钮,其实也可以手动添加,但这种方式会破坏原生导航栈的逻辑,不如push方案优雅,所以更推荐上面的两种push配置方式。

内容的提问来源于stack exchange,提问作者Agung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:55:25