UIStatusBarStyle不能在Swift中工作
我试图改变我的Swift应用程序的状态栏颜色为白色,但我打砖墙。 我有3个ViewControllers每个embedded在一个NavigationController(可能是这个问题?我已经尝试将代码放在NavigationController类。)我已经在我的AppDelegate的didFinishLaunchingWithOptions中尝试了以下两段代码.swift文件,但都没有工作。
application.statusBarStyle = .LightContent
和
UIApplication.sharedApplication().statusBarStyle = .LightContent
所有的文档必须要说的是,UIBarButtonStyle是一个Int,并给了我这个枚举片段,这并没有帮助我在所有的implimentation。
enum UIStatusBarStyle : Int { case Default case LightContent case BlackOpaque }
我错过了什么?
你有两个select。
如果您想要继续手动设置状态栏的样式,请继续执行您正在做的操作,但是您需要将以下按键添加到您的info.plist文件中,其值为NO
。
查看基于控制器的状态栏外观
或者,如果您想要继续使用基于视图控制器的状态栏外观,而不是设置应用程序的statusBarStyle,请覆盖要为其指定状态栏样式的每个视图控制器中的preferredStatusBarStyle
属性。
Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
Swift 2
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
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
你必须设置:
navigationController.navigationBar.barStyle = .black
文字将以白色出现
对于iOS9.x和Xcode7,只需将其放入AppDelegate.swift
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().barStyle = .Black }
这会自动将您的状态栏的风格变为.Lightcontent
在UINavigationController中的所有视图控制器。
(另外,从Info.plist中删除View controller-based status bar appearance
来抑制你也可能看到的警告!)
在Swift 3中,状态栏的样式已经改变为UIViewController中的一个计算属性,你可以像这样重写:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent //or default }
在iOS 9上,不推荐使用以下(setStatusBarStyle),如果你这样做,你会得到一个警告。
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
如果你想在一个镜头中更改所有状态栏,请尝试将以下内容添加到Info.plist中。 这也将使您的启动屏幕状态栏变成白色。 而上面的代码不会。
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
对于我以上的所有工作,直到我补充说:
self.navigationController?.navigationBar.barStyle = .black;
所以:
- 在
.plist
中将UIViewControllerBasedStatusBarAppearance
设置为YES
- 在
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 } }
奇怪的是,使用Swift 3.1和XC8.2.1,但以上所有都不起作用。
我所做的只是
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } } }
没有Plist,没有其他的东西。 HTH
不要编辑你的Info.plist。 将此添加到您的ViewController.swift:
override func preferredStatusBarStyle() -> UIStatusBarStyle { return UIStatusBarStyle.LightContent }
在Swift 3.0中,您可以在ViewController中重写一个基于View控制器的状态栏外观的getter:
override var preferredStatusBarStyle: UIStatusBarStyle { get { return .lightContent } }