关于swift3.0中基于viewConroller修改当前UIStausBarStyle

来源:互联网 发布:ip地址和端口的关系 编辑:程序博客网 时间:2024/06/04 00:24

使用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的样式会切换...对就是淘宝那个骚东西。

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}}

其他两个属性要也是一样的,就这么简单。

收工。



0 0
原创粉丝点击