swift ios试图改变某些VC的状态栏颜色
Posted
技术标签:
【中文标题】swift ios试图改变某些VC的状态栏颜色【英文标题】:swift ios trying to change color of status bar on certain VC's 【发布时间】:2016-11-27 13:23:42 【问题描述】:在我的应用程序中,我有 4 个 ViewController,其中两个我将状态栏从白色更改为黑色,如下所示:
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
override func viewWillDisappear(animated: Bool)
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = .LightContent
问题是,如果我在两个都有状态栏上方代码的 ViewController 之间切换,首先会变成黑色,这是正确的,但是当进入另一个 ViewController 时,它又会变成白色。
如何让某些 ViewController 的状态栏保持白色?
【问题讨论】:
【参考方案1】:尝试在您的 VC 中添加以下方法。使用 .default 或 .lightContent 更改状态栏颜色。我使用 Xcode 8 和 swift 3 进行了测试:
override func preferredStatusBarStyle() -> UIStatusBarStyle
return UIStatusBarStyle.default;
我使用 Xcode 7.3.1 和 swift 2.3 创建了一个新的选项卡式应用程序。我有两个选项卡,其中包含与 FirstViewController 和 SecondViewController 关联的类。在 FirstViewController 我添加了以下方法:
override func preferredStatusBarStyle() -> UIStatusBarStyle
return UIStatusBarStyle.Default;
并且在 SecondViewController 中,我将背景更改为黑色,并添加了以下方法:
override func preferredStatusBarStyle() -> UIStatusBarStyle
return UIStatusBarStyle.LightContent;
最后,我在 FirstViewController 中添加了两个按钮。一个按钮以模态方式呈现控制器,另一个按钮通过按下呈现。当我以模态方式呈现视图时,“preferredStatusBarStyle”工作,但是当我通过推送呈现时,我需要添加以下代码行:
self.navigationController?.navigationBar.barStyle = .Black
【讨论】:
这还需要在项目的info.plist
文件中添加View controller-based status bar appearance
键设置为on/YES,并且可能需要在应用程序的根视图控制器子类上自定义实现- (UIViewController *)childViewControllerForStatusBarStyle;
,具体取决于架构您的视图层次结构
这行不通,因为@markedwardmurray 所说的。但是我不能在每个 VC 中都使用override func viewWillAppear(animated: Bool) super.viewWillAppear(animated) UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
吗?
你会想,但是在视图控制器之间改变状态栏的全局状态有很多特性。使用基于视图控制器的状态栏外观更可靠。在 ios 10 中,要在 UIViewController 上覆盖的 getter 实际上会变成完整的属性。全局外观方法是从应用程序被期望具有单一配色方案(浅色或深色)的日子开始的。应用启动后用频率切换效果不好【参考方案2】:
如果你真的不想重写preferredStatusBarStyle的委托方法,你仍然可以使用:
UIApplication.sharedApplication().statusBarStyle = .LightContent
通过删除:
override func viewWillDisappear(animated: Bool)
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = .LightContent
让状态栏由 viewWillAppear 中发生的事情来设置。显然这更容易出错,但如果你的导航是相对线性的,那么这将是最简单的解决方案
【讨论】:
在 iOS 9.0 中已弃用以上是关于swift ios试图改变某些VC的状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章
swift iOS中的UINavigation状态栏颜色变化[重复]