狀態欄:? 是指iOS屏幕最上面的20像素高的部分,分為前景部分和背景部分
? ? *前景部分:? 包括電池、時間等部件;
? ? *后景部分:顯示顏色或圖片的背景部分;
? ? *狀態欄字體為黑色:UIStatusBarStyle.Default(默認);
? ? *狀態欄字體為白色:UIStatusBarStyle.LightContent;
方法一:
1、在Info.plist中,將View controller-based status bar appearance設為NO。(如沒有此選項可自行添加)
2、在AppDelegate.m中
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
或者
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated:true)
?(這2種書寫方式在iOS9.0以后,官方基本上已經不推薦了。當然還可以用,相比較,第二種書寫方式會報警告,所以在這里我用第一種書寫方式)
*注:到此步狀態欄已經基本設置完成!
3、在個別狀態欄字體顏色不一樣的VC中
方法二:(iOS9.0以后官方推薦的,個人覺得老方法好用)
在Info.plist中,將View controller-based status bar appearance設為YES,或者不設置(默認值就是YES, 則UIApplication.sharedApplication().statusBarStyle無效)
1、在VC中重寫VC的preferredStatusBarStyle方法
2、在viewDidload中調用:self.setNeedsStatusBarAppearanceUpdate() (剛開始的時候需要此調用,后來莫名其妙的的不需要了??)
*注:當VC在nav中時,上面的方法無效,VC中的preferredStatusBarStyle方法根本不用被調用。 原因是,self.setNeedsStatusBarAppearanceUpdate()發出后,只會調用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不會被調用。
解決方法有兩個:
一:自定義一個UINavigationController的子類,在這個子類中重寫childViewControllerForStatusBarStyle方法
二:設置navbar的barStyle屬性會影響statusBar的字體和背景色。如下。
//status bar的字體為白色
//導航欄的背景色是黑色。
self.navigationController?.navigationBar.barStyle = UIBarStyle.Black;
//status bar的字體為黑色
//導航欄的背景色是白色,狀態欄的背景色也是白色。
self.navigationController?.navigationBar.barStyle = UIBarStyle.Default;