代码之家  ›  专栏  ›  技术社区  ›  Harish

状态栏样式与ParentViewController不同的模态视图控制器

  •  2
  • Harish  · 技术社区  · 9 年前

    我有一个带有灯光状态栏样式的视图控制器,然后用户可以按下一个按钮,以模式方式显示游戏中心排行榜。但是,我希望模态视图控制器具有 .Default 当父视图控制器具有 .LightContent 风格这是可能的吗?模态视图控制器是否可以具有与父视图控制器不同的样式?如果是,我将如何实现这一点?

    4 回复  |  直到 9 年前
        1
  •  2
  •   Community CDub    8 年前

    我也遇到过同样的问题。我的解决方案是重写: GKGameCenterViewController 班 那我就跟着 answer here :我已添加 preferredStatusBarStyle() 方法写入我的重写视图控制器并设置 UIViewControllerBasedStatusBarAppearance NO 在.plist文件中。

        2
  •  1
  •   Harish    9 年前

    我想我找到了一个很好的答案。基本上,当以模态呈现时 completionHandler 。在 完井处理程序 在呈现模态视图时,请放入以下代码行:

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

    当您取消模式视图时:

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

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

        3
  •  1
  •   Justin    7 年前

    这解决了我的问题:

    modalViewController.modalPresentationStyle = .overCurrentContext
    
        4
  •  0
  •   superarts.org    7 年前

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

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

    并致电:

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

    只要您想更改状态栏样式。