iOS 7 状态栏隐藏与众不同之处 - 项目设置和代码设置的用途不同
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
在 iOS 7 上,有两种途径来隐藏状态栏
第一种途径,在项目的 Info 信息中增加或修改以下三项,并设置相应的值即可达到预期目的:
Status bar is initially hidden = YES
UIStatusBarHidden~ipad = YES
View controller-based status bar appearance = NO
由于我是做的针对Ipad的项目,所以其中有一项 UIStatusBarHidden~ipad = YES 需要设置,否则也不会起作用。
补充:
新建的Ipad工程中不添加
UIStatusBarHidden~ipad 也是可以的。
Status bar is initially hidden : 只管应用刚启动时,状态栏是否显示;
View controller-based status bar appearance :负责视图控制器中视图是否带有状态栏;
第二种途径,使用代码来设置的方法,在指定的视图控制器中重载 prefersStatusBarHidden 方法,并返回 YES 表示隐藏状态栏 :
- (BOOL)prefersStatusBarHidden { return YES; }
prefersStatusBarHidden 只管视图控制器的视图是否有状态栏;
项目设置与视图控制器重载方法可以组合使用:
View controller-based status bar appearance = YES
prefersStatusBarHidden => YES
这时视图控制器的状态栏是隐藏的;
prefersStatusBarHidden => NO
这时视图控制器的状态栏是显示的;
当
View controller-based status bar appearance = NO 时
prefersStatusBarHidden => NO
这时视图控制器的状态栏是不显示的;
由此可见,prefersStatusBarHidden 只是对
View controller-based status bar appearance = YES 的控制补充。
那么就可以理解为:View controller-based status bar appearance = YES 为是否允许视图控制器显示状态栏,允许的话,
当前是否视图控制器显示状态栏,则由 prefersStatusBarHidden 来控制,该方法默认返回 NO,即不隐藏;
总结:
1、项目设置中的参数,理解为是否允许,不允许的,那就没商量;允许的,则权限下放到视图控制器;
2、视图控制器中的重载方法 prefersStatusBarHidden 实际控制状态栏的显示和隐藏,如果不重载,父类的默认实现是返回 NO,即不隐藏,则在项目设置允许的情况下就会显示;
在 iOS 7 之前,也有以上两种途径来隐藏状态栏,但方法不同,
第一种途径,只需要一个 Status bar is initially hidden = YES 即可;
第二种途径,需要通过应用实例调用设置状态栏的方法,如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 设置状态栏隐藏 [[UIApplication sharedApplication] setStatusBarHidden:YES]; return YES; }