我正在尝试将我的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 }
我错过了什么?
Swift 3.0
在AppDelegate.swift didFinishLaunchingWithOptions中
UIApplication.shared.statusBarStyle = .lightContent
的Info.plist
View controller-based status bar appearance -> NO
Swift 2.2
在AppDelegate.swift didFinishLaunchingWithOptions中
UIApplication.sharedApplication().statusBarStyle = .LightContent
的Info.plist
View controller-based status bar appearance -> NO
在Swift 3中,状态栏样式已更改为UIViewController中的计算属性,您可以像这样覆盖:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent //or default }
奇怪,使用Swift 3.1和XC8.2.1,但以上所有都不起作用.
我做了什么,只是
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }
没有Plist,没有其他东西.HTH
对我来说,除非我添加:
self.navigationController?.navigationBar.barStyle = .black;
所以:
设置UIViewControllerBasedStatusBarAppearance
于YES
在.plist
在viewDidLoad
电话中self.setNeedsStatusBarAppearanceUpdate();
覆盖preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
在overrided方法我设置也是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 } }
你必须设置:
navigationController.navigationBar.barStyle = .black
并且文本将以白色显示
你有两个选择.
如果要继续手动设置状态栏的样式,请继续执行您正在执行的操作,但是您需要将以下键添加到info.plist文件中,其值为NO
.
查看基于控制器的状态栏外观
或者,如果要继续使用基于视图控制器的状态栏外观,而不是设置应用程序的statusBarStyle,请覆盖preferredStatusBarStyle
要为其指定状态栏样式的每个视图控制器中的属性.
斯威夫特3
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
斯威夫特2
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
在iOS 9上,不推荐使用以下(setStatusBarStyle),如果你这样做,你会收到警告.
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
如果您希望一次性更改所有statusBars,请尝试将以下内容添加到Info.plist中.这也会使您的启动屏幕状态栏变白.虽然上面的代码不会.
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
对于iOS9.x和Xcode7,只需将其放入AppDelegate.swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().barStyle = .Black }
这将自动将状态栏的样式转换.Lightcontent
为UINavigationController中的所有视图控制器.
(另外,View controller-based status bar appearance
从Info.plist中删除以抑制您可能也会看到的警告!)