iOS7下status bar相關問題的解決方法
阿新 • • 發佈:2019-02-04
轉載自: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
之前設定好相應的值
- #pragma mark - Status Bar
- - (UIStatusBarStyle)preferredStatusBarStyle
- {
-
return
- }
- - (BOOL)prefersStatusBarHidden
- {
- return _isFullScreen;
- }
- - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
- {
- return UIStatusBarAnimationSlide;
- }
這樣,當你想要控制status bar的展現形式時(不需要動畫就去掉),只需要呼叫
-
[UIView animateWithDuration:.3 animations:^{
- if (ISIOS7) {
- [self setNeedsStatusBarAppearanceUpdate];
- }
- }];
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:支援