【问题标题】:Change statusbar text color programmatically inside the same view controller在同一视图控制器内以编程方式更改状态栏文本颜色
【发布时间】:2016-07-11 16:26:13
【问题描述】:

我在 iOS 9 上使用 UIScrollView 有两个页面,对于第一页,我希望状态栏文本为黑色,第二页为白色。因此,当我滑动到第二页时,如果我滑动到第一页,我希望状态栏颜色变为白色和黑色。

我试过设置 在 plist 文件中 UIViewControllerBasedStatusBarAppearance 为 false 然后以编程方式调用:

UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackTranslucent;
SetNeedsStatusBarAppearanceUpdate();

但运气不好,状态栏文本显示为白色,即使在调用 UIApplication.SharedApplication.StatusBarStyle = UIStatusBarStyle.BlackTranslucent;

知道如何在同一视图控制器中手动更改状态栏文本颜色吗?

【问题讨论】:

    标签: ios xamarin


    【解决方案1】:

    如果您为视图控制器使用导航控制器,请尝试更改属性:

    NavigationController.NavigationBar.BarStyle
    

    “默认”应为黑色,“LightContent”应为白色。我相信黑色选项已被弃用。

    否则,您可以在 Info.plist 中选择基于视图控制器的状态栏样式,并使用 preferredStatusBarStyle property 提到的 here

    在您的 ViewDidLoad 方法中,执行 SetNeedsStatusBarAppearanceUpdate();

    添加如下方法:

     public override UIStatusBarStyle PreferredStatusBarStyle()
     {
            return UIStatusBarStyle.LightContent; //Or Default/Black/etc.
     }
    

    注意:使用UIApplication.SharedApplication 更改状态栏样式在iOS 9 中已被弃用。请改用上述方法。希望这有帮助。干杯!

    【讨论】:

    • 这行得通,我不得不使用 UIStatusBarStyle.Default 而不是 BlackTranslucent 作为黑色。但是动画由于某种原因无法正常工作。我将 UIStatusBarAnimation PreferredStatusBarUpdateAnimation 设置为 UIStatusBarAnimation.Fade 但它不起作用。
    • 我已经用你提到的“默认”== 黑色的东西更新了这个问题。 :) 我会调查动画问题,如果发现任何问题,我会报告。
    • 太好了,谢谢。关于动画部分,我不得不像这样将更新命令包装到命令动画中:UIView.Animate(0.3f, 0, UIViewAnimationOptions.CurveEaseOut, SetNeedsStatusBarAppearanceUpdate, () => {});
    【解决方案2】:

    转到您的应用程序 Plist 并将其添加为新行并将其设置为 NO。

    查看基于控制器的状态栏外观 NO

    添加一个 bool 来确定 UIStatusBar 颜色的状态并添加一个 Toggle 方法

    @property(nonatomic) BOOL black;
    
    
    -(void)toggleStatuSBar:(id)sender{
    
        if(black) {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
            black = NO;
    
        }else {
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
            black = YES;
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果使用导航控制器,则添加:

      - (void)viewWillAppear:(BOOL)animated
      {
          [super viewWillAppear:animated];
          self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2018-05-24
        • 2014-03-16
        • 2014-02-08
        相关资源
        最近更新 更多