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

iOS 26与Xcode 26下hidesBottomBarWhenPushed失效问题求助

iOS 26中hidesBottomBarWhenPushed失效问题解答

1. iOS 26中hidesBottomBarWhenPushed的行为变更

是的,iOS 26针对UITabBar的Liquid Glass风格做了行为调整,hidesBottomBarWhenPushed的默认逻辑被修改——当标签栏启用新视觉样式时,该属性不再自动隐藏标签栏,而是保持标签栏以半透明的Liquid Glass状态显示。苹果在iOS 26的SDK文档中提到,这是为了统一新视觉风格下的页面过渡体验。

2. 恢复原有隐藏行为的解决方案

以下是几种可行方案:

  • 方案一:禁用Liquid Glass标签栏样式
    在UITabBarController的初始化代码中,显式设置标签栏为传统样式:

    tabBar.scrollEdgeAppearance = nil
    tabBar.standardAppearance = UITabBarAppearance()
    

    此操作会让标签栏回到iOS 25及更早版本的行为,hidesBottomBarWhenPushed将恢复正常。

  • 方案二:手动控制标签栏显示与隐藏
    在推送视图控制器前后,直接通过UITabBarController实例控制标签栏状态:

    // 推送前隐藏标签栏
    tabBarController?.tabBar.isHidden = true
    navigationController?.pushViewController(targetVC, animated: true)
    
    // 在目标视图控制器的viewWillDisappear中恢复显示
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        tabBarController?.tabBar.isHidden = false
    }
    

    需注意处理返回时的状态恢复,避免标签栏状态异常。

  • 方案三:通过导航控制器代理动态控制
    实现UINavigationControllerDelegate的navigationController(_:willShow:animated:)方法,根据目标视图控制器的hidesBottomBarWhenPushed属性动态切换标签栏状态:

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        let shouldHide = viewController.hidesBottomBarWhenPushed
        tabBarController?.tabBar.isHidden = shouldHide
        // 可选:调整alpha实现平滑过渡
        tabBarController?.tabBar.alpha = shouldHide ? 0 : 1
    }
    

补充注意事项

  • 若使用Storyboard,需确认目标视图控制器的Hides Bottom Bar When Pushed勾选状态正确,同时检查Tab Bar的Appearance设置是否默认启用了Liquid Glass风格。
  • iOS 26中,若标签栏配置了scrollEdgeAppearance,即使设置hidesBottomBarWhenPushed为true,也会优先保持标签栏显示,必须清空该属性才能恢复原有逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:12:06