iOS 隐藏状态栏

如何隐藏某个控制器的状态栏?

1、在 info.plist 文件增加 View controller-based status bar appearance 属性,设置值为 YES。

2、重写控制器的方法:

- (BOOL)prefersStatusBarHidden {
    return self.shouldHiddeStatusBar;
}

3、需要改变状态栏状态,就调用 setNeedsStatusBarAppearanceUpdate 方法:

[self setNeedsStatusBarAppearanceUpdate];

4、注意!!!

如果修改了 toVC 的 modalPresentationStyle,一定要修改 toVC 的 modalPresentationCapturesStatusBarAppearance 属性为 YES,上面的代码才有效!

例如,present 某个控制器的时候,想让当前控制器不消失,就要修改 toVC 的 modalPresentationStyle 属性为 UIModalPresentationOverFullScreen。当 toVC 发生某些事情就隐藏状态栏,需要这样写:

// fromVC.m 

UIViewController *toVC = [UIViewController new];
// 当前控制器不消失,toVC 透明的时候能看到
toVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
// 是否接管状态栏外观,即重写的 prefersStatusBarHidden 等方法是否会被调用
toVC.modalPresentationCapturesStatusBarAppearance = YES;
[self presentViewController:toVC animated:YES completion:nil];

被 presented 的控制器要这样写:

// toVC.m 

// 重写
- (BOOL)prefersStatusBarHidden {
    return self.shouldHiddeStatusBar;
}

// 某个事件处理函数
- (void)buttonClick {
    // 刷新状态栏
    [self setNeedsStatusBarAppearanceUpdate];
}

参考文章:
UIViewController's prefersStatusBarHidden not working

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容