iOS 10状态栏无法隐藏,已尝试多种方案仍未解决,求其他方法
我太懂这种试遍常规方法还是卡壳的感觉了!针对你遇到的iOS 10状态栏隐藏问题,除了你已经尝试的那些操作,这里还有几个值得一试的思路:
检查导航控制器的层级影响
如果你的目标视图控制器是嵌套在UINavigationController中的,单独给子控制器重写prefersStatusBarHidden可能不会生效——因为导航控制器会接管状态栏的设置。你可以给UINavigationController添加一个分类,让它继承顶层视图控制器的状态栏偏好:@implementation UINavigationController (StatusBarCustom) - (BOOL)prefersStatusBarHidden { return self.topViewController.prefersStatusBarHidden; } @end之后在你的目标VC里保持
- (BOOL)prefersStatusBarHidden { return YES; }的实现即可。验证Info.plist的键值准确性
有时候看似正确的设置可能因为键名拼写错误或者位置不对失效:- 确保
View controller-based status bar appearance是布尔值NO,Status bar is initially hidden是布尔值YES - 确认这些键是在主应用的Info.plist中设置,而不是某个target扩展的plist文件
- 确保
修复启动屏的状态栏状态
如果启动屏(LaunchScreen.storyboard或LaunchImage)中状态栏没有隐藏,可能会导致系统后续的状态栏状态异常。你可以:- 在LaunchScreen的视图控制器中重写
prefersStatusBarHidden返回YES - 或者直接在启动屏的界面编辑器中隐藏状态栏
- 在LaunchScreen的视图控制器中重写
调整代码调用的时机
确保调用setStatusBarHidden:的时机是在视图完全显示之后,比如viewDidAppear:方法中,而不是viewDidLoad(此时视图还未渲染完成):- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; }别忘了前提是
View controller-based status bar appearance必须设置为NO,否则这个代码调用会被系统忽略。排查第三方库的干扰
有些第三方SDK(比如广告、统计或UI框架)可能会强制修改状态栏的显示状态。你可以尝试临时移除这些库,测试是否能正常隐藏状态栏,以此排查是否存在冲突。
内容的提问来源于stack exchange,提问作者Student

