iOS 更改状态栏颜色和隐藏状态栏

刺骨的言语ヽ痛彻心扉 2022-04-11 13:45 526阅读 0赞

更改状态栏颜色

iOS7以后

状态栏的字体为黑色:UIStatusBarStyleDefault

状态栏的字体为白色:UIStatusBarStyleLightContent

解决方案

1、在info.plist中,将View controller-based status bar appearance 设为 NO

状态栏字体的颜色只由下面的属性设定,默认为白色:

  1. [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault

解决个别vc中状态栏字体颜色不同的办法

  1. 1、修改info.plist
  2. info.plist中,将 View controller-based status bar appearance 设为 NO.
  3. 2、在app delegate中添加:
  4. [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
  5. 3、在个别ViewController状态栏字体颜色不一样的地方:
  6. -(void)viewWillAppear:(BOOL)animated {
  7. [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
  8. }
  9. -(void)viewWillDisappear:(BOOL)animated {
  10. [super viewWillDisappear:animated];
  11. [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
  12. }

2、在info.plist中,将View controller-based status bar appearance 设为 YES

在info.plist中 View controller-based status bar appearance的 默认值就是YES

如果View controller-based status bar appearance为YES 时 [UIApplication sharedApplication].statusBarStyle 无效。

解决方案:

  1. 1、在vc中重写vcpreferredStatusBarStyle方法
  2. -(UIStatusBarStyle)preferredStatusBarStyle {
  3. return UIStatusBarStyleDefault;
  4. }
  5. 2、在viewDidload中调用:
  6. [self setNeedsStatusBarAppearanceUpdate];

可能出现的问题:

当vc在nav中时,上面方法没用,vc中的preferredStatusBarStyle方法根本不用被调用。

原因是,[self setNeedsStatusBarAppearanceUpdate]发出后,只会调用navigation controller中的preferredStatusBarStyle方法,vc中的preferredStatusBarStyley方法跟本不会被调用。

解决办法有两个:

  1. 方法一:
  2. 设置 navbar barStyle 属性会影响status bar 的字体和背景色。如下。
  3. //status bar的字体为白色 ,导航栏的背景色是黑色。
  4. self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
  5. //status bar的字体为黑色 ,导航栏的背景色是白色,状态栏的背景色也是白色。
  6. self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
  7. 方法二:
  8. 自定义一个navController的子类,在这个子类中重写preferredStatusBarStyle方法:
  9. MyNav* nav = [[MyNav alloc] initWithRootViewController:vc];
  10. self.window.rootViewController = nav;
  11. @implementation MyNav
  12. - (UIStatusBarStyle)preferredStatusBarStyle {
  13. UIViewController* topVC = self.topViewController;
  14. return [topVC preferredStatusBarStyle];
  15. }

隐藏某个控制器的状态栏

1.View controller-based status bar appearance = NO

  1. [[UIApplication sharedApplication] setStatusBarHidden:hidden];

2.View controller-based status bar appearance = YES

  1. - (BOOL)prefersStatusBarHidden {
  2. return YES;
  3. }

3.设置Status bar is initially hidden = YES

  1. 可以隐藏启动页展示过程的状态栏。

链接:https://www.jianshu.com/p/889cff2b3a52

发表评论

表情:
评论列表 (有 0 条评论,526人围观)

还没有评论,来说两句吧...

相关阅读

    相关 隐藏状态栏

    在开发过程中很多时候都要隐藏页面的状态栏:        UIViewController中提供了一个prefersStatusBarHidden方法用于控制当前的控制器的状