【问题标题】:Modal View Controller with Different StatusBar Style than the ParentViewController状态栏样式与 ParentViewController 不同的模态视图控制器
【发布时间】:2016-02-06 23:31:13
【问题描述】:

我有一个带有 Light Status Bar Style 的视图控制器,然后用户可以按下一个按钮,该按钮以模态方式显示 Game Center 排行榜。但是,当父视图控制器具有 .LightContent 样式时,我希望模态视图控制器具有 .Default 样式。这可能吗?模态视图控制器的样式可以与父视图控制器不同吗?如果是这样,我将如何实现这一目标?

【问题讨论】:

  • 绝对有可能。在每个视图控制器中,您是否覆盖了- preferedStatusBarStyle:
  • @ajfigueroa 实际上,因为我要展示 Game Center 排行榜,所以我没有 Game Center 排行榜的视图控制器。

标签: ios swift modalviewcontroller uistatusbar


【解决方案1】:

我也遇到了同样的问题。我的解决方案是覆盖:GKGameCenterViewControllerclass 然后我关注了answer here:我添加了 preferredStatusBarStyle() 方法进入我的覆盖视图控制器,并在 .plist 文件中将 UIViewControllerBasedStatusBarAppearance 设置为 NO

【讨论】:

  • 只是一个问题,但由于某种原因,当我使用您的解决方案时,整个应用程序状态栏的外观变黑。我如何有一些白色的状态栏颜色?有没有办法做到这一点?
  • 我还将preferredStatusBarStyle() 放入我的BaseViewController 中,用作我所有视图控制器的父类。
  • 我已经这样做了,但是当我在plist中将值设置为NO时它不起作用,当plist中的值设置为YES时它起作用。
  • Navigationview有你的看法吗?
  • 不,我没有将视图嵌入到导航视图中。如果基于视图控制器的状态栏外观设置为“是”,则视图具有白色状态栏,但 Game Center 视图状态栏是白色而不是黑色
【解决方案2】:

好吧,我想我找到了一个很好的解决方案。基本上在模态演示时,您有一个completionHandler。在completionHandler 中,当您呈现模态视图时,放置这些代码行:

self.setStatusBarStyle(.Default)
self.setNeedsStatusBarAppearanceUpdate()

当您关闭模态视图时:

self.setStatusBarStyle(.LightContent)
self.setNeedsStatusBarAppearanceUpdate()

确保不要在视图控制器中实现 preferredStatusBarStyle。该方法让我失望,如果您实现了 preferredStatusBarStyle 方法,它将覆盖 setStatusBarStyle 方法,这个技巧将不起作用。基本上不要实现preferredStatusBarStyle。

【讨论】:

    【解决方案3】:

    这为我解决了:

    modalViewController.modalPresentationStyle = .overCurrentContext
    

    【讨论】:

      【解决方案4】:

      以下答案基于@Harish 的解决方案。在您特定的UIViewController(或您自己的基类)中添加:

      var statusBarStyle: UIStatusBarStyle = .lightContent
      override var preferredStatusBarStyle: UIStatusBarStyle {
          return statusBarStyle
      }
      

      然后调用:

      self.statusBarStyle = .default // or .lightContent
      self.setNeedsStatusBarAppearanceUpdate()
      

      只要你想改变状态栏样式。

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多