iOS设置状态栏(UIStatusBarStyle) 总结

本以为设置状态栏很简单,但是每次用每次忘,每次查资料,干脆总结一下

首先需要明确,默认情况下状态的样式是:UIStatusBarStyleDefault 

1.View controller-based status bar appearance 设置为YES 或者不设置(默认是YES)

此时通过代码直接设置状态栏是无效的

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

此时在info.plist里面设置状态栏也是无效的

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

如果希望不同页面,状态栏颜色不同,需要再每个页面重写preferredStatusBarStyle方法,返回当前页面的状态栏

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

如果该页面在导航栏控制器内,这样设置也不起作用的,因为系统只会调用navigationController的preferredStatusBarStyle方法,而navigationController默认返回UIStatusBarStyleDefault。此时我们需要自定义一个导航栏控制器,并重写他的preferredStatusBarStyle方法。

// 返回最顶部控制器的状态栏样式
- (UIStatusBarStyle)preferredStatusBarStyle {
    UIViewController *topVC = self.topViewController;
    return [topVC preferredStatusBarStyle];
}

这样,在每个需要改变的页面,重写当前页面preferredStatusBarStyle并返回需要的样式就好了

此时如果应用大多数页面状态栏都是白色,可以自定义一个基类,重写preferredStatusBarStyle返回UIStatusBarStyleLightContent,其他的都集成该类。

2.View controller-based status bar appearance 设置为NO 

此时状态栏默认样式,是由info.plist文件中的Status bar style来决定的,不设置默认是UIStatusBarStyleDefault黑色。也可以通过代码设置

// View controller-based status bar appearance为NO 是有效
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

如果想要在不同的页面显示不同的样式,每次页面显示的时候设置,页面消失的时候还原

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值