iOS 两种方式设置状态栏

1、ios9.0以前设置状态栏字体颜色

///白色

\[UIApplication sharedApplicationsetStatusBarStyle:UIStatusBarStyleLightContent];

///黑色

\[UIApplication sharedApplicationsetStatusBarStyle:UIStatusBarStyleDefault];

会看到如下提示:

'setStatusBarStyle:' is deprecated: first deprecated in iOS 9.0 - Use -UIViewController preferredStatusBarStyle

1

注意:1、该方法在9.0后就废弃了,需要使用在preferredStatusBarStyle方法中实现

2、setStatusBarStyle设置状态栏颜色,我们需要在plist中添加

View controller-based status bar appearance --->NO

3、⚠️划重点:上面这个属性会影响 preferredStatusBarStyle的,

4、所以你在使用preferredStatusBarStyle来实现时,该值需要设置为YES,否则不生效

5、⚠️也就是说View controller-based status bar appearance 值为NO使用

setStatusBarStyle生效,为YES时preferredStatusBarStyle生效,一定要注意啦

2、iOS9.0以后使用如下方式:

  • (UIStatusBarStyle)preferredStatusBarStyle {

//1:白色 0:黑色

if (self.vcFlag == 1) {

return UIStatusBarStyleLightContent;

}else {

if (@available(iOS 13.0, *)) {

return UIStatusBarStyleDarkContent;

} else {

return UIStatusBarStyleDefault;

}

}

}

注意:View controller-based status bar appearance 为YES

要想在页面滑动时,状态栏字体颜色会随着变黑或白色,flag我们已经添加,只要让其主动调用该方法

///会自动调用preferredStatusBarStyle方法,只要加上相关判断即可

self setNeedsStatusBarAppearanceUpdate;

这里必须注意:设置状态栏的时候,首先分为两种情况,其一:在plist里面设置了View controller-based status bar appearance为NO,这个属性的意义就是不让控制器基于**status bar appearance的设置,也就是自己可以在每一个控制器里面自己进行设置。**这个时候就不能再用

- (UIStatusBarStyle )preferredStatusBarStyle这个方法来设置,是没有效果的,而必须要用\[UIApplication sharedApplication setStatusBarStyle:UIStatusBarStyleLightContent]来设置,其二,当plist里面设置了View controller-based status bar appearance为YES,或者没有设置的时候(默认为YES),这个时候可以根据**(UIStatusBarStyle**)preferredStatusBarStyle这个方法来设置,用这个方法的时候也分为两种情况,一种情况是当前要设置的ViewController嵌入在一个NavigationController里面的时候,

系统默认的将指定状态栏的权利交给了导航控制器,要是想让导航控制器的 childViewController 来设置状态栏的颜色,就要自定义导航控制器来指定! 自定义导航控制器后,要是想指定状态栏由谁来设置,就需要说明清楚权利交给谁,下面两个方法都可以来指定,通过方法名也可以很清楚的理解, preferredStatusBarStyle 这个方法重写,来返回想要指定的控制器的这个方法的返回结果, childViewControllerForStatusBarStyle 这个方法则是用来说明让谁来拥有这个权利,两个方法都可以做的,自己选择即可,个人觉得第一个比较好,指定清楚之后,直接调这个控制器的这个方法返回值即可

​​​​​​​

完成上面的自定义后,只要在当前的Viewcontroller里面实现

preferredStatusBarStyle方法,设置好想要的状态栏颜色,然后在需要变更的地方调用selfsetNeedsStatusBarAppearanceUpdate;

(这个方法会通知系统去调用当前UIViewController的preferredStatusBarStyle方法),这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view,系统最快能1秒刷新60次页面,具体要看程序设置),

复制代码
- (UIStatusBarStyle)preferredStatusBarStyle
{ViewController *vc = self.topViewController;return [vc preferredStatusBarStyle];
}- (UIViewController *)childViewControllerForStatusBarStyle
{return self.topViewController;
}
相关推荐
csdn_aspnet3 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
秋雨梧桐叶落莳4 小时前
【iOS】Block底层详解
macos·ios·cocoa
茶底世界之下5 小时前
舞台灯下的萨克斯:用 Awaking 让铜管从蓝幕前亮起来
ios·app·产品
传奇开心果编程6 小时前
【Flutter踩坑排雷】第28课:平台目录缺失与修复坑|`flutter create` 的“重建”与“覆盖”边界
android·flutter·ios·移动开发·跨平台·dart·声明式ui
3095566666 小时前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
Geek-Chow1 天前
00 Apple Code Signing, In Depth — A Series
ios
传奇开心果编程2 天前
【Flutter踩坑排雷】第25课:ScrollController 误用坑|跳转失效、监听泄漏与“控制器未附加”
android·flutter·ios·移动开发·跨平台·dart·声明式ui
90后的晨仔2 天前
macOS 27 下两个 Xcode 坑:真机 DDI 错配与模拟器 App Translocation
ios
开心猴爷2 天前
iOS 上架 App 流程
后端·ios
奶油话梅糖2 天前
用 iPhone 扫一间房,AI 帮你在浏览器里 1:1 重建它:Wes Bos 的 scan-to-threejs 工作流
人工智能·ios·iphone