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
相关产品推荐
相关产品推荐

