版权声明:本文为CSDN博主「Deft_MKJing宓珂璟」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/deft_mkjing/article/details/51705021
介绍
这效果简直要了我的老命啊,在StackOverFlow上看遍了所有的回答,你们先感受下我的心情
这回答,试了下,不行啊
再来看看另一个,可以是可以,不过我要iOS 7以上的那个新方法啊
再换一个,没错,就是这个了,虽然票数少,但是就是你了
1.介绍第一种做法,比较简单粗暴(但是貌似被iOS 9给废掉了)
不过这种都不是问题,可以看一下Apple对已经废弃的方法是如何处理的
翻译文章
原文章链接
还是介绍下 使用UIApplication的statusBarStyle方法来设置状态栏,不过,首先要停止使用View Controller - based status bar appearance。在project target的info plist中插入一个新的key,View controller-based status bar appearance,将其设置为NO
然后就可以用刚才能废弃的方法进行修改了
我去啊,这什么鬼啊,怎么那么白,白的都看不到了,各位将就下吧,差不多就这个效果了
2.介绍第二种做法,哎呦,这个厉害了啊,不过这真的搞死我了,先普及下调用方法的知识
给个老外的解释,英文好的自己去看
https://www.kurutepe.com/2013/11/view-controller-containers-and-status-bar-style/
给大伙分析下
- (UIStatusBarStyle)preferredStatusBarStyle
在需要的控制器里面重写这个方法,返回值就是UIStatusBarStyleDefault或者UIStatusBarStyleLightContent
在该方法里面,如果只是简单的返回值而已,那么该界面在显示的时候会立马改变StatusBar的前景部分
如果该VC已经显示出来了,你需要做的就是根据滚动的偏移量在实时更改StatusBar的前景颜色,那么你就要用到
[self setNeedsStatusBarAppearanceUpdate]来显视调用preferredStatusBarStyle这个方法才能更改StatusBar
的颜色
然而这个时候坑来了,你以为这样设置好就完了么,他就会调用了么,你真的是too young too naive
最关键的东西来了
- (UIViewController *)childViewControllerForStatusBarStyle:
为什么要重写这个东西呢
这个方法默认返回值是nil。也就是当我们调用setNeedsStatusBarAppearanceUpdate的时候,系统会调用container(容器控制器)的preferredStatusBarStyle这个方法(app.window.rootViewController的preferred的方法,一般我们用UINavigationController或者UITabBarController来做container),也就是根本不会调用子控制器(我们所看到的UIViewcontroller)的preferredStatusBarStyle方法。这个时候- (UIViewController *)childViewControllerForStatusBarStyle:就派上用场了
给UINavigationController写一个Catogory,implementation如下,然后记得在需要的界面包含头文件就行
该类扩展的意思就是,我重写了,你不要调用Container(NavigationController或者UITabBarController)的preferredStatusBarStyle这个方法了,去调用self.visibleViewController的preferredStatusBarStyle,那么,我们写在UIViewcontroller里面的方法就会被调用了,就能更改StatusBar的前景颜色了
总结:
只要UIViewController重写的childViewControllerForStatusBarStyle返回值不是nil,那么UIViewcontroller的preferredStatusBarStyle方法不会被系统的Container(NavigationController或者UITabBarController)调用,而是调用childViewControllerForStatusBarStyle返回的UIViewController的preferredStatusBarStyle来控制StatuBar的颜色
听不明白没关系,你遇到你就知道了,这真的有点坑
你以为这就完了么???跑起来
这东西真的尴尬了我很久,我辛辛苦苦找了大半年的资料,竟然一点反应都没有
最后试着把这货改了
再跑起来
既然介绍了StatusBar的前景,稍微带一下背景吧
navigationBar的setBarTintColor接口,可以用此接口可改变statusBar的背景色
但是有个方法需要注意的是:
一旦你调用了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改变statusBar的背景色,statusBar的背景色就会变成纯黑色
那么咱们可以在UINavigationBar上addSubView,这个View就可以自己定义了,大小和原生的一样就OK了
————————————————
网友评论