標籤:
更改狀態列顏色
將iOS狀態列預設顏色為黑色,但有時為了需求,我們需要更改狀態列的顏色,常用的方式有:
方法一:
1.在info.plist添加View controller-based status bar appearance為NO;
2.在頁面執行[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]。
但是這種做法在ios9.0以前是完全沒有問題的,進入iOS9.0後,便會出現如下警告:
<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE en
為了消除這條警告:修改方式如下:
1.在info.plist刪掉這條也可以,或者將View controller-based status bar appearance設定為YES
2.在需要改變顏色的頁面增加:(非全域,需要在每個需要的Viewcontroller中加入)
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
但是問題又來了,如果我們初始化一個UINavigationController或者UITabBarController作為RootViewcontroller,那麼在子viewController中設定的上訴解決方案就會失效,該怎麼辦呢?
為UINavigationController擴充一個category,在類別裡面實現如下方法,並通過UINavigationController調用該方法,那麼在viewController中就可以實現狀態列顏色的改變了。
-(UIViewController *)childViewControllerForStatusBarStyle{ return self.topViewController;}
在狀態列發生改變時需要調用這個方法:
[self setNeedsStatusBarAppearanceUpdate];
設定狀態列的動畫效果:
-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation{ // return UIStatusBarAnimationFade; return UIStatusBarAnimationSlide;}
隱藏狀態列:
如果不設定UINavigationController等,有兩種方式隱藏狀態列
方法一:
1.將info.plist添加View controller-based status bar appearance為NO;
2.將info.plist添加Status bar is initially hidden為 YES。
方法二:(非全域)
-(BOOL)prefersStatusBarHidden{ return YES;}
如果初始化一個UINavigationController或者UITabBarController作為RootViewcontroller,那麼第二種方法就失效了,解決辦法同更改狀態列顏色。
在某一個介面中隱藏狀態列的方法:
1.在 info.plist添加View controller-based status bar appearance為NO;
2.在需要隱藏的頁面:
頁面將要出現時:
-(void)viewWillAppear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; }
在頁面消失的地方:
-(void)viewWillDisappear:(BOOL)animated{ [[UIApplication sharedApplication] setStatusBarHidden:No withAnimation:UIStatusBarAnimationFade];}
更改ios狀態列顏色