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 UIStatusBarStyleDefault;
}
- (BOOL)prefersStatusBarHidden
{
return _isFullScreen;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}
這樣,當你想要控制status bar的展現形式時(不需要動畫就去掉),只需要調用
[UIView animateWithDuration:.3 animations:^{
if (ISIOS7) {
[self setNeedsStatusBarAppearanceUpdate];
}
}];