【问题标题】:How to change PreferredStatusBarStyle programmatically如何以编程方式更改 PreferredStatusBarStyle
【发布时间】:2023-03-22 00:23:01
【问题描述】:

我想通过按下按钮将状态栏的颜色从白色更改为黑色,以编程方式仅在单个 ViewController 中

这是代码:

- (UIStatusBarStyle)preferredStatusBarStyle {
    NSLog(@"PreferredStatusBarStyle");
    if(nav_bar.alpha==1)
    {
        NSLog(@"->UIStatusBarStyleBlackOpaque");
        return UIStatusBarStyleBlackOpaque;
    }
    else
    {
        NSLog(@"->UIStatusBarStyleLightContent");
        return UIStatusBarStyleLightContent;
    }}

那么当我按下按钮时,动作是:

[self setNeedsStatusBarAppearanceUpdate];

但是这行不通!

当我按下按钮日志时,根据 navbar.alpha 写入正确的状态,但状态栏文本颜色保持 UIStatusBarStyleBlackOpaque 就像视图出现时一样。

【问题讨论】:

    标签: objective-c ios7 statusbar uistatusbar


    【解决方案1】:

    setStatusBarStyle:animated: 已被弃用。在 iOS9 中,您可以使用 preferredStatusBarStylesetNeedsStatusBarAppearanceUpdate 实现相同的效果。

    在您的视图控制器中:

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        if (condition) {
            return .LightContent
        }
    
        return .Default
    }
    

    然后当你的情况发生变化时:

    self.setNeedsStatusBarAppearanceUpdate()
    

    【讨论】:

      【解决方案2】:

      在 Swift 4 上:

      override var preferredStatusBarStyle: UIStatusBarStyle {
          return .lightContent
      }
      

      希望它能帮助其他人找到这篇文章。

      【讨论】:

      • 别忘了调用 setNeedsStatusBarAppearanceUpdate()
      【解决方案3】:

      您需要做的是通过共享应用程序调用 -setStatusBarStyle:animated: 方法,像这样

      [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
      

      您也可以在没有动画参数的情况下使用它。请记住 UIStatusBarStyleBlackOpaque 在 iOS 7 中已弃用,文档说您想改用 UIStatusBarStyleLightContent

      编辑: 对不起,如果你想使用preferredStatusBarStyle,看看这个preferredStatusBarStyle isn't called

      【讨论】:

      • [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent Animation:YES];
      • 这在 iOS 9 中已被弃用。其他解决方案?
      • @Arcrammer 我已经在上面回答了
      • 必须调用 [self setNeedsStatusBarAppearanceUpdate];然后 - (UIStatusBarStyle)preferredStatusBarStyle { NSLog(@"PreferredStatusBarStyle"); if(nav_bar.alpha==1) { }
      猜你喜欢
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多