1. 程式人生 > >關於swift3.0中基於viewConroller更改當前UIStausBarStyle

關於swift3.0中基於viewConroller更改當前UIStausBarStyle

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

returnUIStatusBarStyleLightContent;

}

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

其他兩個屬性要也是一樣的,就這麼簡單。

收工。