iOS上狀態欄 就是指的最上面的20像素高的部分狀態欄分前后兩部分,要分清這兩個概念,后面會用到:
前景部分:就是指的顯示電池、時間等部分;背景部分:就是顯示黑色或者圖片的背景部分;
如下圖:前景部分為白色,背景部分為黑色

- (UIStatusBarStyle)PReferredStatusBarStyle這個方法來設置,是沒有效果的,而必須要用[[UIapplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]來設置,其二,當plist里面設置了View controller-based status bar appearance為YES,或者沒有設置的時候(默認為YES),這個時候可以根據(UIStatusBarStyle)preferredStatusBarStyle這個方法來設置,用這個方法的時候也分為兩種情況,一種情況是當前要設置的ViewController嵌入在一個NavigationController里面的時候,
系統默認的將指定狀態欄的權利交給了導航控制器,要是想讓導航控制器的childViewController來設置狀態欄的顏色,就要自定義導航控制器來指定! 自定義導航控制器后,要是想指定狀態欄由誰來設置,就需要說明清楚權利交給誰,下面兩個方法都可以來指定,通過方法名也可以很清楚的理解,preferredStatusBarStyle這個方法重寫,來返回想要指定的控制器的這個方法的返回結果,childViewControllerForStatusBarStyle這個方法則是用來說明讓誰來擁有這個權利,兩個方法都可以做的,自己選擇即可,個人覺得第一個比較好,指定清楚之后,直接調這個控制器的這個方法返回值即可[objc] view plain copy- (UIStatusBarStyle)preferredStatusBarStyle { ViewController *vc = self.topViewController; return [vc preferredStatusBarStyle]; } - (UIViewController *)childViewControllerForStatusBarStyle { return self.topViewController; }完成上面的自定義后,只要在當前的Viewcontroller里面實現
preferredStatusBarStyle方法,設置好想要的狀態欄顏色,然后在需要變更的地方調用[selfsetNeedsStatusBarAppearanceUpdate];
(這個方法會通知系統去調用當前UIViewController的preferredStatusBarStyle方法),這個和UIView的setNeedsDisplay原理差不多(調用UIView對象的setNeedsDisplay方法后,系統會在下次頁面刷新時,調用重繪該view,系統最快能1秒刷新60次頁面,具體要看程序設置),
下面在進行分情況的討論
設置statusBar的【前景部分】簡單來說,就是設置顯示電池電量、時間、網絡部分標示的顏色, 這里只能設置兩種顏色:默認的黑色(UIStatusBarStyleDefault)白色(UIStatusBarStyleLightContent)可以設置的地方有兩個:plist設置里面 和 程序代碼里背景部分,簡單來說,就是背景色;改變方法有兩種:
navigationBar的setBarTintColor接口,用此接口可改變statusBar的背景色
注意:一旦你設置了navigationBar的- (void)setBackgroundImage:(UIImage *)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics接口,那么上面的setBarTintColor接口就不能改變statusBar的背景色,statusBar的背景色就會變成純黑色。
創建一個UIView,設置該UIView的frame.size 和statusBar大小一樣,設置該UIView的frame.origin 為{0,-20},設置該UIView的背景色為你希望的statusBar的顏色,在navigationBar上addSubView該UIView即可。
新聞熱點
疑難解答