具有与ParentViewController不同的StatusBar样式的模态视图控制器

时间:2016-02-06 23:31:14

标签: ios swift modalviewcontroller uistatusbar

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

嗯,我想我找到了一个很好的解决方案。基本上,当以模态方式呈现时,您有一个completionHandler。在completionHandler中,当您呈现模态视图时,请放置以下代码行:

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

当您解雇模态视图时:

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

确保不要在View Controller中实现preferredStatusBarStyle。该方法让我失望,如果你实现preferredStatusBarStyle方法,它将覆盖setStatusBarStyle方法,这个技巧将无法工作。基本上不要实现preferredStatusBarStyle。

答案 2 :(得分:1)

这解决了我:

modalViewController.modalPresentationStyle = .overCurrentContext

答案 3 :(得分:0)

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

UIViewController

并致电:

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

每当您想要更改状态栏样式时。