我有一个带有灯状态栏样式的视图控制器,然后用户可以按下一个按钮,该按钮以模态方式呈现游戏中心排行榜。但是,当父视图控制器具有.Default
样式时,我希望模态视图控制器具有.LightContent
样式。这可能吗?模态视图控制器可以具有与父视图控制器不同的样式吗?如果是这样,我将如何实现这一目标?
答案 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
}
每当您想要更改状态栏样式时。