1. 程式人生 > >iOS7下status bar相關問題的解決方法

iOS7下status bar相關問題的解決方法

轉載自:http://blog.csdn.net/volcan1987/article/details/14227313

iOS7裡status bar的實現跟iOS6下有寫不一樣,前段時間碰到了這個問題,今天總結下

首先網上有很多解決辦法,但是有些我覺得並沒有按照蘋果的思路來,比如把UIViewControllerBasedStatusBarAppearance在plist裡設定為NO的方法,這個方法的確可行,但是並不是一個“正確”的思路,而且會有些問題,比如,當你在某個介面隱藏了status bar,退回到上一個介面時,status bar仍然是隱藏的

首先,蘋果把UIViewControllerBasedStatusBarAppearance

預設的值設為YES,是有他的道理的,新系統下,蘋果希望我們的viewcontroller去控制status bar,也就是說,我們大多數的介面應該是統一的,偶爾一些viewcontroller需要status bar特殊控制的,完全交給當前的viewcontroller來做。

程式碼,其中_isFullScreen需要你在呼叫setNeedsStatusBarAppearanceUpdate

之前設定好相應的值

  1. #pragma mark - Status Bar
  2. - (UIStatusBarStyle)preferredStatusBarStyle  
  3. {  
  4.     return
     UIStatusBarStyleDefault;  
  5. }  
  6. - (BOOL)prefersStatusBarHidden  
  7. {  
  8.     return _isFullScreen;  
  9. }  
  10. - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation  
  11. {  
  12.     return UIStatusBarAnimationSlide;  
  13. }  

這樣,當你想要控制status bar的展現形式時(不需要動畫就去掉),只需要呼叫

  1. [UIView animateWithDuration:.3 animations:^{  
  2.             if (ISIOS7) {  
  3.                 [self setNeedsStatusBarAppearanceUpdate];  
  4.             }  
  5.         }];  

1樓 不息 2013-11-06 17:29發表 [回覆] [引用] [舉報] 補充一點:
如果你使用了系統的UINavigationController,且它的navigationBar沒有被隱藏的話,它的rootController及之後push的controller的preferredStatusBarStyle方法不會被呼叫(其他兩個方法還是會被呼叫);
UINavigationController會根據自己navigationBar的barStyle,來決定StatusBarStyle的值;

如果你設定了self.navigationController.navigationBarHidden = YES;
那preferredStatusBarStyle就會被正常呼叫了。
Re: volcan1987 2013-11-06 17:34發表 [回覆]
回覆iami11tongmeng:支援