各种关于ios7 下隐藏status bar的问题。汇集一下: 用xcode5开发新的iOS游戏,虽然我已经在info.plist里面把Status bar is initially hidden设置成了YES,但在设备上一跑还是看到status bar,
到Info.plist,然后添加一个新的row,"View controller-based status bar appearance",然后把键值设置为NO.
--------------------------------------------------------
先来看看网上同胞们给出的答案:
1.总结的最全面的要数
这篇文章总结的固然很好,但终究是少了些例子。而且是英文的,相信不少和我一样英文不好的,看得是一头雾水。不过增加些概念方面得知识还是有必要的。
2. 自己看到的其他人的解决办法以及自己尝试的结果,大概是下面这样子的,欢迎拍砖交流。
第一种:
首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES;
然后,在UIViewController子类中实现以下两个方法: 1 | - (UIStatusBarStyle)preferredStatusBarStyle |
3 | return UIStatusBarStyleLightContent; |
6 | - (BOOL)prefersStatusBarHidden |
最后,在需要刷新状态栏样式的时候,调用[self setNeedsStatusBarAppearanceUpdate]方法即可刷新 这种方法本人觉得不是很好(不知道是否方法部队),能解决问题,但对于没有基类的程序(架构不是太好的应用),未免很繁琐,需要进行追个处理。
第二种:
首先,需要在Info.plist配置文件中,增加一下两个键值对。
View controller-based status bar appearance > NO
Status bar style > UIStatusBarStyleLightContent (simple string)(这个我本人建议还是加在代码中比较好,如果代码中有相应的处理,其他有地方设置部队,相应的controller将不受影响)
然后,在相关的controller中进行修改。
比如:navigationcontroller需要增加一个64pix的图片,或者修改其高度
其他普通的controller,本人的处理办法是加入代码:
01 | - (void)viewDidAppear:(BOOL)animated |
03 | [super viewDidAppear:NO]; |
04 | CGRect frame = self.view.frame; |
05 | if ([[UIDevice currentDevice] isOS7Version]) { |
07 | frame.size.height = self.view.frame.size.height - 20; |
08 | [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; |
12 | self.view.frame = frame; |
第三种:
直接设置window,因为在ios7中statusbar是浮在上面的,那么我们就将window向下移20pix。从理论上讲,我很认同这种方法,但没有尝试成功。如有那位大神成功了尝试,多谢能指教。
3. 在这里鄙人还要补充的一点是UIImagePickerController对于statusbar的修改。这点曾纠结了我一个多小时,后来看到了有人如下解决:
1 | - (void)navigationController:(UINavigationController *)navigationController |
02 | willShowViewController:(UIViewController *)viewController |
03 | animated:(BOOL)animated { |
05 | if ([navigationController isKindOfClass:[UIImagePickerController class]] && |
06 | ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { |
07 | [[UIApplication sharedApplication] setStatusBarHidden:NO]; |
08 | [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; |
很好的解决了我的问题。参考链接如下:
还是先辈们总结的到位呀:又发现了一篇好文章
---------------------------------