Vei*_*ita 9 xcode uiviewcontroller ios swift
我一直试图改变我的Swift应用程序中状态栏的颜色,我已经确定了在XCode中执行此操作的四种方法.然而,我只能成功使用方法3:
1.模拟指标(仅限故事板显示)
2.更改常规 - >部署信息 - >状态栏样式
确保以下Info.list设置设置为"NO":
View controller-based status bar appearance : NO
Run Code Online (Sandbox Code Playgroud)
在此处的下拉框中选择"Light"或"Default":
General->Deployment Info->Status Bar Style
Run Code Online (Sandbox Code Playgroud)
3.手动设置
确保以下Info.plist设置设置为"NO":
View controller-based status bar appearance : NO
Run Code Online (Sandbox Code Playgroud)
插入以下代码(通常在didFinishLaunchingWithOptions中):
UIApplication.sharedApplication().statusBarStyle = .LightContent
Run Code Online (Sandbox Code Playgroud)
4.覆盖"preferredStatusBarStyle()"
确保存在以下Info.plist属性并将其设置为"YES":
View controller-based status bar appearance : YES
Run Code Online (Sandbox Code Playgroud)
然后将以下代码添加到为Storyboard中的ViewController设置的UIViewController(或派生类):
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
Run Code Online (Sandbox Code Playgroud)
我目前的理解
模拟指标仅用于显示,并且在运行时不提供实际更改.我相信手动设置和更改常规选项卡中的设置可能会做同样的事情,但我不确定.我想有一种方法可以直接为各个视图控制器设置此属性.
题
出于某种原因,实际上对我有用的唯一方法是方法3,手动设置.其他方法都没有提供任何改变.就个人而言,我更喜欢在派生类中重写,所以我有一个共享UIViewController样式的中心位置.
nhg*_*rif 11
这没什么,因为它只是一个模拟的指标.您可以在界面构建器中进行设置,但模拟的度量标准只是模拟的,不会在运行时应用.
此选项可防止各个视图控制器设置状态栏外观(由于Info.plist设置),并且它依赖于部署设置中的默认颜色集,但该值可以在运行时更改(请参阅选项3).
与选项2一样,此选项可防止各个视图控制器设置状态栏外观(由于Info.plist设置),但与选项2不同,我们在运行时动态设置颜色.我们可以在发布时在app委托中执行此操作...或者我们可以在其他时间更改它.也许我们有像谷歌地图应用程序的夜间模式,或者我们可能让用户在某处配置自己的主题颜色.
如果您正在嵌入UINavigationController,那么您将需要子类UINavigationController并在此处覆盖"preferredStatusBarStyle()".
你可能会错过这里概述的一个步骤.在viewDidLoad,尝试指定您希望有机会设置状态栏.
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
}
Run Code Online (Sandbox Code Playgroud)
至于为什么对于看似相同的事情有不同的方法,我们必须首先意识到这些实际上并不是同一个东西.
再次,让我们分解它.
为什么我们有2/3选项和4选项?
因为在某些应用程序中,您可能希望应用程序中的每个视图控制器具有相同的状态栏颜色,但根据某些设置,状态栏颜色可能会有所不同.
例如,考虑使用Google地图应用.在晚上,应用程序变黑,状态栏需要显示白色,但在白天,应用程序为白色,状态栏需要为黑色.每个视图控制器都是一样的,因此设置颜色的代码只需要在一个地方实现(不要求每个视图控件都从同一个基本父级继承).为此,我们可能希望您选择2/3.
但是考虑一个具有不同颜色的视图控制器的应用程序,其中一些使用白色状态栏看起来更好,而其他看起来更好用黑色.对于这种方法,我们需要您的选项4,并让每个视图控制器分别指定状态栏应该是什么颜色.
简而言之,您的选项2/3是一个全局状态栏设置,无论您在应用程序中的哪个位置都适用,而选项4是本地的每VC设置.