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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 06:34   225   0

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

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

收工。



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP