關於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}}
其他兩個屬性要也是一樣的,就這麼簡單。
收工。