【问题标题】:UIStatusBarStyle changes after displaying a UIWindow over UIStatusBar在 UIStatusBar 上显示 UIWindow 后 UIStatusBarStyle 发生变化
【发布时间】:2013-10-27 10:37:09
【问题描述】:

我在UIStatusBar 上显示一个UIWindow,默认情况下UIStatusBarStyle 设置为UIStatusBarStyleLightContent,但是当我显示UIWindowUIStatusBarStyle 切换到黑色样式。

【问题讨论】:

标签: ios xcode uiwindow uistatusbar


【解决方案1】:

我在解决同样的问题时遇到了这个话题。您需要做的是创建一个新的视图控制器并将其设置为您的UIWindow 的根视图控制器(即您在其他视图上显示的UIWindow)。然后,在这个新的视图控制器中实现preferredStatusBarStyle 方法,如下所示:

- (UIStatusBarStyle) preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

或者,您可以将 Info.plist 中的“基于视图控制器的状态栏外观”属性设置为 NO,并按照 Azabella 的建议实现 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent] 方法。但是,这会将所有视图的状态栏设置为白色。如果这没问题,那么就不需要单独创建一个视图控制器来设置preferredStatusBarStyle 方法。

【讨论】:

  • 在我的例子中,我分配了一个新的 UIWindow 来显示包括状态栏在内的所有视图的内容,然后我再也不会使用 setNeedsStatusBarAppearanceUpdate 再次调用preferredStatusBarStyle。然后我无法更改状态栏颜色。有什么建议吗?
  • 您是否按照上面的建议为这个新的 UIWindow 创建了根 viewController?
  • 我还需要将prefersStatusBarHidden 设置为false,否则状态栏将被隐藏。
【解决方案2】:

您是否将 yourAppName-Info.plist 中的“查看基于控制器的状态栏外观”属性设置为 NO ?

【讨论】:

    【解决方案3】:

    这是一个相当简单的问题,我发现将modalPresentationCapturesStatusBarAppearance 设置为true 即可解决。

    【讨论】:

    • 你会在哪里设置 modalPresentationCapturesStatusBarAppearance 以防止覆盖 UIWindow 捕获状态栏外观?
    【解决方案4】:

    添加这个,以便在视图出现时设置颜色/样式

    -(void)viewDidAppear:(BOOL)animated {
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多