我正在尝试将我的Swift应用中的状态栏颜色更改为白色,但是我正在撞墙。我有3个ViewControllers,每个都嵌入在NavigationController中(可能是问题吗?我已经尝试将代码放在NavigationController类中。)我在AppDelegate的didFinishLaunchingWithOptions中尝试了以下两段代码。 .swift文件,但都没有。
application.statusBarStyle = .LightContent
和
UIApplication.sharedApplication().statusBarStyle = .LightContent
Docs所说的所有内容都是UIBarButtonStyle是一个Int并且给了我这个enum片段,它根本没有帮助我。
enum UIStatusBarStyle : Int {
case Default
case LightContent
case BlackOpaque
}
我错过了什么?
答案 0 :(得分:144)
您有两种选择。
如果您想继续手动设置状态栏的样式,请继续执行您正在执行的操作,但是您需要将以下键添加到info.plist文件中,其值为NO
查看基于控制器的状态栏外观
或者,如果要继续使用基于视图控制器的状态栏外观,而不是设置应用程序的statusBarStyle,请覆盖您要为其指定状态栏样式的每个视图控制器中的preferredStatusBarStyle
属性
Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}
答案 1 :(得分:142)
在AppDelegate.swift中的Swift 3.0
didFinishLaunchingWithOptions
Conversion[AutoA, AutoC]
的Info.plist
UIApplication.shared.statusBarStyle = .lightContent
在AppDelegate.swift中的Swift 2.2
didFinishLaunchingWithOptions
View controller-based status bar appearance -> NO
的Info.plist
UIApplication.sharedApplication().statusBarStyle = .LightContent
答案 2 :(得分:29)
您必须设置:
navigationController.navigationBar.barStyle = .black
,文字将以白色显示
答案 3 :(得分:20)
对于iOS9.x和Xcode7,只需将其放在AppDelegate.swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UINavigationBar.appearance().barStyle = .Black
}
对于UINavigationController中的所有视图控制器,这将自动将状态栏的样式转换为.Lightcontent
。
(另外,从Info.plist中删除View controller-based status bar appearance
以禁止您可能也会看到警告!)
答案 4 :(得分:15)
在Swift 3中,状态栏样式已更改为UIViewController中的计算属性,您可以像这样覆盖:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent //or default
}
答案 5 :(得分:12)
在iOS 9上,不推荐使用以下(setStatusBarStyle),如果你这样做,你会收到警告。
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
如果您希望一次性更改所有statusBars,请尝试将以下内容添加到Info.plist中。这也会使您的启动屏幕状态栏变白。虽然上面的代码不会。
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
答案 6 :(得分:9)
对我而言,直到我补充说:
self.navigationController?.navigationBar.barStyle = .black;
这样:
UIViewControllerBasedStatusBarAppearance
YES
设为.plist
viewDidLoad
致电self.setNeedsStatusBarAppearanceUpdate();
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
navigationBar.barStyle
所以最终
override var preferredStatusBarStyle: UIStatusBarStyle {
self.navigationController?.navigationBar.barStyle = .black;//or default
return .lightContent //or default
}
如果这不起作用,您可以尝试添加UINavigationController
extension
:
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
if let lastVC = self.viewControllers.last
{
return lastVC.preferredStatusBarStyle
}
return .default
}
}
答案 7 :(得分:5)
奇怪,使用Swift 3.1&amp; XC8.2.1,但以上所有都不起作用。
我做了什么,只是
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
没有Plist,没有其他东西。 HTH
答案 8 :(得分:2)
在Swift 3.0中,您可以在ViewController中覆盖基于View控制器的状态栏外观的getter:
override var preferredStatusBarStyle: UIStatusBarStyle {
get { return .lightContent }
}
答案 9 :(得分:1)
不要编辑您的Info.plist。将其添加到ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent
}