状态栏样式与 ParentViewController 不同的模态视图控制器
Posted
技术标签:
【中文标题】状态栏样式与 ParentViewController 不同的模态视图控制器【英文标题】:Modal View Controller with Different StatusBar Style than the ParentViewController 【发布时间】:2016-02-06 23:31:13 【问题描述】:我有一个带有 Light Status Bar Style 的视图控制器,然后用户可以按下一个按钮,该按钮以模态方式显示 Game Center 排行榜。但是,当父视图控制器具有 .LightContent
样式时,我希望模态视图控制器具有 .Default
样式。这可能吗?模态视图控制器的样式可以与父视图控制器不同吗?如果是这样,我将如何实现这一目标?
【问题讨论】:
绝对有可能。在每个视图控制器中,您是否覆盖了- preferedStatusBarStyle:
?
@ajfigueroa 实际上,因为我要展示 Game Center 排行榜,所以我没有 Game Center 排行榜的视图控制器。
【参考方案1】:
我也遇到了同样的问题。我的解决方案是覆盖:GKGameCenterViewController
class
然后我关注了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()
只要你想改变状态栏样式。
【讨论】:
以上是关于状态栏样式与 ParentViewController 不同的模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
状态栏样式与 ParentViewController 不同的模态视图控制器
UIStatusBar样式与UINavigationBar一致
iOS 13 状态栏样式无效(childForStatusBarStyle 从未调用)
iOS 7 状态栏在 iPhone 应用程序中回到 iOS 6 默认样式?