状态栏样式不会因单个视图而改变 - 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的主要内容,如果未能解决你的问题,请参考以下文章