iOS7下status bar相关问题的解决方法
2014-01-12 22:46
323 查看
转载自: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
之前设置好相应的值
[objc] view
plaincopy
#pragma mark - Status Bar
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
- (BOOL)prefersStatusBarHidden
{
return _isFullScreen;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}
这样,当你想要控制status bar的展现形式时(不需要动画就去掉),只需要调用
[objc] view
plaincopy
[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:支持
iOS7里status bar的实现跟iOS6下有写不一样,前段时间碰到了这个问题,今天总结下
首先网上有很多解决办法,但是有些我觉得并没有按照苹果的思路来,比如把UIViewControllerBasedStatusBarAppearance在plist里设置为NO的方法,这个方法的确可行,但是并不是一个“正确”的思路,而且会有些问题,比如,当你在某个界面隐藏了status
bar,退回到上一个界面时,status bar仍然是隐藏的
首先,苹果把UIViewControllerBasedStatusBarAppearance默认的值设为YES,是有他的道理的,新系统下,苹果希望我们的viewcontroller去控制status
bar,也就是说,我们大多数的界面应该是统一的,偶尔一些viewcontroller需要status bar特殊控制的,完全交给当前的viewcontroller来做。
代码,其中_isFullScreen需要你在调用setNeedsStatusBarAppearanceUpdate
之前设置好相应的值
[objc] view
plaincopy
#pragma mark - Status Bar
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleDefault;
}
- (BOOL)prefersStatusBarHidden
{
return _isFullScreen;
}
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}
这样,当你想要控制status bar的展现形式时(不需要动画就去掉),只需要调用
[objc] view
plaincopy
[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:支持
相关文章推荐
- iOS- 用MapKit和CoreLocation 来实现移动设备(地图与定位)
- 使用DSPBIOS的CCS工程设置(独家!)
- iOS----NSTimer的使用小结
- ios define NSLog debug 应用发布nslog注释
- IOS7状态栏
- iOS摇一摇实现
- 谷歌分析iOS开发包实战
- 【小贴士】zepto find元素以及ios弹出键盘可能让你很头疼
- ios沙盒,
- Ios(ipad iphone) 支持字体一览
- 一、IOS运行原理
- IOS之操作表ActionSheet(免Delegate)
- iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
- ios开发(二十二)坐标的错乱
- ios7Label自适应大小
- iOS多线程开发(五)---GCD(二)block && Grand Central Dispatch
- iOS移除地图标注大头针
- iOS多线程开发(五)---GCD(Grand Central Dispatch)
- iOS多线程开发(四)---线程同步
- iOS多线程开发(三)--Run Loop(四)