iOS 7 状态栏隐藏与众不同之处 - 项目设置和代码设置的用途不同

iOS 7 状态栏隐藏与众不同之处 - 项目设置和代码设置的用途不同

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino否则,出自本博客的文章拒绝转载或再转载,谢谢合作。



 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;
}





你可能感兴趣的:(iOS 7 状态栏隐藏与众不同之处 - 项目设置和代码设置的用途不同)