具有与 ParentViewController 不同的 StatusBar 样式的模态视图控制器
Modal View Controller with Different StatusBar Style than the ParentViewController
我有一个带有 Light Status Bar Style 的视图控制器,然后用户可以按下一个按钮,该按钮会以模态方式显示 Game Center 排行榜。但是,当父视图控制器具有 .LightContent
样式时,我希望模态视图控制器具有 .Default
样式。这可能吗?模态视图控制器是否可以具有与父视图控制器不同的样式?如果是这样,我将如何实现?
我遇到了同样的问题。我的解决方案是覆盖:GKGameCenterViewController
class
然后我关注了 answer here: 我已经添加了
preferredStatusBarStyle()
方法进入我的覆盖视图控制器并在 .plist 文件中将 UIViewControllerBasedStatusBarAppearance
设置为 NO
。
好吧,我想我找到了解决问题的好方法。基本上,当以模态方式呈现时,你有一个 completionHandler
。当您呈现模式视图时,在 completionHandler
中放置这些代码行:
self.setStatusBarStyle(.Default)
self.setNeedsStatusBarAppearanceUpdate()
当您关闭模态视图时:
self.setStatusBarStyle(.LightContent)
self.setNeedsStatusBarAppearanceUpdate()
确保不要在您的视图控制器中实现 preferredStatusBarStyle。该方法让我失望,如果您实现 preferredStatusBarStyle 方法,它将覆盖 setStatusBarStyle 方法,并且此技巧将不起作用。基本上不要实施 preferredStatusBarStyle.
这为我解决了:
modalViewController.modalPresentationStyle = .overCurrentContext
以下答案基于@Harish 的解决方案。在你的特定UIViewController
(或你自己的基础class)中添加:
var statusBarStyle: UIStatusBarStyle = .lightContent
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyle
}
然后调用:
self.statusBarStyle = .default // or .lightContent
self.setNeedsStatusBarAppearanceUpdate()
任何时候你想改变状态栏样式。
我有一个带有 Light Status Bar Style 的视图控制器,然后用户可以按下一个按钮,该按钮会以模态方式显示 Game Center 排行榜。但是,当父视图控制器具有 .LightContent
样式时,我希望模态视图控制器具有 .Default
样式。这可能吗?模态视图控制器是否可以具有与父视图控制器不同的样式?如果是这样,我将如何实现?
我遇到了同样的问题。我的解决方案是覆盖:GKGameCenterViewController
class
然后我关注了 answer here: 我已经添加了
preferredStatusBarStyle()
方法进入我的覆盖视图控制器并在 .plist 文件中将 UIViewControllerBasedStatusBarAppearance
设置为 NO
。
好吧,我想我找到了解决问题的好方法。基本上,当以模态方式呈现时,你有一个 completionHandler
。当您呈现模式视图时,在 completionHandler
中放置这些代码行:
self.setStatusBarStyle(.Default)
self.setNeedsStatusBarAppearanceUpdate()
当您关闭模态视图时:
self.setStatusBarStyle(.LightContent)
self.setNeedsStatusBarAppearanceUpdate()
确保不要在您的视图控制器中实现 preferredStatusBarStyle。该方法让我失望,如果您实现 preferredStatusBarStyle 方法,它将覆盖 setStatusBarStyle 方法,并且此技巧将不起作用。基本上不要实施 preferredStatusBarStyle.
这为我解决了:
modalViewController.modalPresentationStyle = .overCurrentContext
以下答案基于@Harish 的解决方案。在你的特定UIViewController
(或你自己的基础class)中添加:
var statusBarStyle: UIStatusBarStyle = .lightContent
override var preferredStatusBarStyle: UIStatusBarStyle {
return statusBarStyle
}
然后调用:
self.statusBarStyle = .default // or .lightContent
self.setNeedsStatusBarAppearanceUpdate()
任何时候你想改变状态栏样式。