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

重新进入UITabBarController后UINavigationBar不显示的问题咨询

解决iOS 11.0-11.2中UITabBarController作为导航根VC时导航栏消失的问题

我之前做项目的时候刚好碰到过这个奇葩问题,确实是iOS 11早期版本的一个系统bug,只在11.0到11.2这几个版本里出现。下面是几个亲测有效的修复方法:

方案一:在TabBarController子类中强制恢复导航栏显示

给你的UITabBarController写个子类,重写viewWillAppear(_:)方法,每次控制器出现在界面上时,主动把导航栏设为可见:

class CustomTabBarController: UITabBarController {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // 只针对出问题的iOS版本做处理,不影响其他版本
        if #available(iOS 11.0, *), ProcessInfo().operatingSystemVersion.majorVersion == 11, 
           ProcessInfo().operatingSystemVersion.minorVersion <= 2 {
            navigationController?.setNavigationBarHidden(false, animated: animated)
        }
    }
}

这里的版本判断更精准,只会在iOS11.0-11.2版本执行这段修复代码,避免干扰其他正常版本的导航栏逻辑。

方案二:Tab切换时同步修复导航栏状态

如果你的项目里有自定义Tab切换的逻辑,也可以在TabBarController的代理方法里处理:

extension CustomTabBarController: UITabBarControllerDelegate {
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
        // 每次切换Tab时确保导航栏是显示的
        if #available(iOS 11.0, *), ProcessInfo().operatingSystemVersion.majorVersion == 11, 
           ProcessInfo().operatingSystemVersion.minorVersion <= 2 {
            navigationController?.setNavigationBarHidden(false, animated: true)
        }
    }
}

别忘了在TabBarController的初始化或者viewDidLoad里设置self.delegate = self哦。

方案三:明确设置导航栏半透明属性(辅助方案)

有些情况下,导航栏的半透明属性未明确设置也会触发这个bug,你可以在创建导航控制器的时候主动设置:

let tabBarVC = CustomTabBarController()
// 添加你的三个子VC到tabBarVC...
let navController = UINavigationController(rootViewController: tabBarVC)
// 明确设置半透明属性,不管是true还是false,避免系统默认值导致的问题
navController.navigationBar.isTranslucent = false

这个方法不是万能的,但在某些场景下能和前两个方案配合,彻底解决问题。

问题根源

这个bug的本质是iOS 11.0-11.2版本中,当你切换到非第一个Tab后退出TabBarController,再次进入时系统没有正确恢复导航栏的isHidden状态,导致导航栏被错误地隐藏了。我们通过主动强制设置导航栏可见,就能覆盖系统的错误状态,让导航栏正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:54