状态栏样式不会因单个视图而改变 - Swift 2/iOS9

Posted

技术标签:

【中文标题】状态栏样式不会因单个视图而改变 - Swift 2/iOS9【英文标题】:Status bar style not changing for individual views - Swift 2/iOS9 【发布时间】:2016-11-29 12:23:03 【问题描述】:

我希望将 default 状态栏样式设置为某些视图控制器,而不是其他视图控制器。对于其他视图,我想将其设置为 lightcontent。

在听取另一篇文章的建议后,我尝试在 info.plist 中将 View controller-based status bar appearance 设置为 YES,然后将以下代码添加到 viewController.swift 中(试图仅更改视图控制器的状态栏样式有问题):

override func preferredStatusBarStyle() -> UIStatusBarStyle 

    return UIStatusBarStyle.LightContent


但是,尽管有以下建议,但这不起作用:how do I properly change my status bar style in swift 2/ ios 9?。

什么是最好的解决方案?

【问题讨论】:

我认为这条评论(在你引用的问题中)解决了你的问题:“如果你使用这种方法,请确保你在 info.plist 文件中设置标志以使基于视图控制器的状态将标志设置为“是”。如果是这样,这个问题可能应该作为重复删除。 @Daniel 如果您阅读我的问题,您会发现我实际上已经遵循了此说明并将标志标记为是。 您可能需要调试视图层次结构并确保应用程序的 rootViewController 可以正确找到带有 childViewControllerForStatusBarStyle 和 childViewControllerForStatusBarHidden 的控制器 @markedwardmurray 这不是问题的一部分。我已经解决了问题并回答了问题。 【参考方案1】:

通过首先删除 info.plist 中的 View controller-based status bar appearance 然后将其添加到我的导航视图控制器来解决此问题:

extension UINavigationController 

public override func childViewControllerForStatusBarHidden() -> UIViewController? 
    return self.topViewController


public override func childViewControllerForStatusBarStyle() -> UIViewController? 
    return self.topViewController

然后我将它添加到连接到我的 navigationController 的 viewController:

override public func preferredStatusBarStyle() -> UIStatusBarStyle 
    return .LightContent


override func prefersStatusBarHidden() -> Bool 
    return false

编辑:您可以选择忽略 xcode 为您提供的与最后一步相关的任何警告 - 第一个功能可以从公共更改为内部,它仍然可以工作。

【讨论】:

Xcode 会生成什么警告?期待特别容忍的弃用警告,您应该始终注意 Xcode 提出的问题。

以上是关于状态栏样式不会因单个视图而改变 - Swift 2/iOS9的主要内容,如果未能解决你的问题,请参考以下文章

WebSocket 客户端的状态不会因网络丢失而改变

如何在swift中逐渐隐藏状态栏

Swift iOS - 即使我隐藏它,导航栏也不会保持隐藏状态

如何使用 swift 在一个视图控制器中更改状态栏颜色?

状态栏图标颜色不会随主题而改变

UIStatusBar样式与UINavigationBar一致