iOS状态栏(UIStatusBar)

2018-03-30  本文已影响0人  fangfangzhuzhu

1.设置启动页的状态栏样式

进入Xcode的Targets->General->DeploymentInfo->Status Bar Style,设置其值为Default时,状态栏样式为黑色;设置其值为Light时,状态栏样式为白色。设置完成之后info.plist里面的Status bar style值自动改变。


image.png

(在info.plist文件中,找到Status bar style键,其值为Gray style (default)时,状态栏样式为黑色;其值为UIStatusBarStyleLightContent时,状态栏样式为白色,作用跟直接在Deployment Info里选择一样。)

2.如果设置info.plist中UIViewControllerBasedStatusBarAppearance为NO,表示不需要控制器自己控制状态栏则:

启动后在AppDelegate中全局设置状态栏样式

[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

如果页面需要特殊处理UIStatusBarStyleDefault,在viewWillAppear和viewWillDisappear中设置即可

- (void)viewWillAppear:(BOOL)animated {

    [superviewWillAppear:animated];

    [UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleDefault;

}

- (void)viewWillDisappear:(BOOL)animated {

    [superviewWillDisappear:animated];

    [UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;

}

3.如果设置info.plist中UIViewControllerBasedStatusBarAppearance为YES,那么需要在控制器里实现preferredStatusBarStyle方法,自己控制状态栏,全局设置无效

- (UIStatusBarStyle)preferredStatusBarStyle{

    return UIStatusBarStyleLightContent;

}

对于导航控制器,需要在分类中实现preferredStatusBarStyle方法来控制导航控制器以及子控制器的状态栏


- (UIStatusBarStyle)preferredStatusBarStyle{

    return UIStatusBarStyleLightContent;

}

但是如果子控制器的状态栏显示与UINavigationController分类里设置的不一致,子控制器即使实现preferredStatusBarStyle方法也不会被调用,就需要特殊处理

解决办法:让UINavigationController实现- (UIViewController *)childViewControllerForStatusBarStyle方法。将顶层的控制器返回。这样就可以了。

在分类中实现childViewControllerForStatusBarStyle

- (UIViewController*)childViewControllerForStatusBarStyle

{

   returnself.topViewController;

}

然后在每个子制器里自己设置preferredStatusBarStyle

上一篇下一篇

猜你喜欢

热点阅读