美文网首页
iOS StatusBar那些事儿

iOS StatusBar那些事儿

作者: BreadAwesome | 来源:发表于2017-10-06 10:50 被阅读232次

这段时间工作也比较忙,很久没更新博客,在放假就更新一篇自己对StatusBar的知识整理吧。

UIStatusBarStyle枚举

typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
    UIStatusBarStyleDefault                                     = 0, // Dark content, for use on light backgrounds
    UIStatusBarStyleLightContent     NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
    
    UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
    UIStatusBarStyleBlackOpaque      NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;

首先看一下UIStatusBarStyle的枚举

  • UIStatusBarStyleDefault 字体为黑色
  • UIStatusBarStyleLightContent 字体为白色

旧的设置方法

1 在Info.plist中将View controller-based status bar appearance设为NO
2 在想要改变StatusBar颜色的地方设置

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

3 在想要隐藏StatusBar颜色的地方设置

[UIApplication sharedApplication].statusBarHidden = YES;

但到了iOS9之后这样做就会有警告

// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_DEPRECATED_IOS(3_2, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;

注意:Info.plist文件中,View controller-based status bar appearance设为YES,则View controller对StatusBar的设置优先级高于application的设置。为NO则以application的设置为准。

新的设置方法

1 在Info.plist中将View controller-based status bar appearance设为YES
2 在ViewController中重写方法preferredStatusBarStyle

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

但是,你会发现当ViewController在NavgationController中时该方法不会被调用。原因是NavgationController的childViewControllerForStatusBarStyle默认返回的是nil,这时系统调用的实际上是NavgationController的preferredStatusBarStyle方法。
解决方法是定义一个NavgationController的子类,在子类中重写方法

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

3 在ViewController中重写方法prefersStatusBarHidden

- (BOOL)prefersStatusBarHidden {
    return YES;
}

这里就比较迷了,我原以为和preferredStatusBarStyle一样在ViewController在NavgationController中时该方法不会被调用,但事实上却调用了。打印NavgationController的childViewControllerForStatusBarHidden,发现它默认返回的就是topViewController。这我就不是很懂了,如果有知道的我们一起交流交流。

4 在ViewController已经显示的情况下想要更改StatusBar,我们可以主动调用setNeedsStatusBarAppearanceUpdate来通知系统调用preferredStatusBarStyleprefersStatusBarHidden方法。

启动页StatusBar设置

1 在Info.plist中设置Status bar style
2 想要设置隐藏则在Info.plist中设置Status bar is initially hidden

等价方法:

设置Status Bar StyleHide status bar即可。

相关文章

  • iOS StatusBar那些事儿

    这段时间工作也比较忙,很久没更新博客,在放假就更新一篇自己对StatusBar的知识整理吧。 UIStatusBa...

  • iOS 截图的那些事儿

    iOS 截图的那些事儿 iOS 截图的那些事儿

  • iOS 13 更改状态栏背景

    项目中需要更改 statusBar 背景色,可是 iOS 13 statusBar 找不到了,原来使用的 kvc ...

  • iOS 13 更改状态栏背景

    项目中需要更改 statusBar 背景色,可是 iOS 13 statusBar 找不到了,原来使用的 kvc ...

  • iOS 13更新

    StatusBur iOS 13之前获取StatusBar代码: iOS 13之后已经获取不到了,iOS 13之后...

  • iOS13 获取StatusBar并且获取网络状态

    获取StatusBar 项目中通过StatusBar来获取手机当前状态,但是在iOS 13中便获取不到了,调试了一...

  • iOS statusBar

    1.statusBar Info.plist文件配置说明详 分别在 Info.plist中添加以下字段,分别表...

  • iOS StatusBar

    1、在 Info.plist 中配置 View controller-based status bar appea...

  • iOS statusBar

    隐藏/显示statusBar(iOS 7.0+) 全局隐藏/显示状态栏在info.plist中添加View con...

  • ios statusBar

    viewController不在容器控制器中时1.1 设置启动动画时颜色 1.2 设置进入应用颜色 2.viewC...

网友评论

      本文标题:iOS StatusBar那些事儿

      本文链接:https://www.haomeiwen.com/subject/lxplyxtx.html