使用swift3.0写项目且又没熟读官方API文档的小朋友,在基于控制器更改statusBar样式时估计会遇到那么点麻烦,因为现在网上貌似还没有这个资料,好像是3.0的新特性。其实swift的注释文档里早就写好了解决方法,可见阅读官方文档是个好习惯。
既然找到了,就记一下同时方便下大家。
想看解决办法的可以直接跳到最后。
关于UIStausBarStyle修改的方法,我们知道的有两种:
1.基于application层次的更改
分两个步骤:
一、设置info.plist文件
View controller-based status bar appearance 这个key的意思是基于控制字显示statusBa的样式,YES的意思是基于控制器,NO则反之。
二、写代码
OC:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
swift:
UIApplication.shared.setStatusBarStyle(.lightContent, animated: true)
这个改法改起来大刀阔斧,但在某些场合还是要这么用的,比如你的app里有个商品详情界面,滑动的时候statusBar的样式会切换...对就是淘宝那个骚东西。
补充:
上述场景也可以用第二种方式修改,关键代码 setNeedsStatusBarAppearanceUpdate ,请自行研究。
2.基于viewController的修改
同样也是两个步骤,且第一步和前者一样,只不过value选NO.关键在第二个步骤上。
二、写代码
以往的资料都说重写一个preferStatusBarStyle方法,返回值里返回要修改的样式,系统会自动调用。像酱:
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
OC是没问题。
swift3.0之前貌似也可以。
但如果你用3.0你就会发现不能override这个方法,敲不出来,强行写也会有个does not override any method from its superClass.
网上搜吧,没有,还是重写那一套。
怎么办呢。
3.swift3.0的文档变化
UIViewController里居然不提供这个方法接口,那就跳进去找一找。
command f 一下 “statusBarStyle”。来到一片神奇的地方,带statusBar的东东都在这里,我想这就是我想要的滑板鞋..咳。是一些open修饰的属性:
open var preferredStatusBarStyle: UIStatusBarStyle { get }
open var prefersStatusBarHidden: Bool { get }
open var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get }
就说嘛,苹果的工程师们为你关了一扇门,自然会打开一扇窗的。
注释文档写的很清楚啦:
大意就是:这些方法确定了控制器被展示时的状态栏属性,在viewController的子类重写他们以返回想要的statusBar属性。
那还等什么。
4 swift3.0中基于viewController修改当前UIStausBarStyle方法
控制器中重写preferredStatusBarStyle这个属性就行啦:
override var preferredStatusBarStyle: UIStatusBarStyle{get { return.lightContent}}
其他两个属性要也是一样的,就这么简单。
收工。
|