我正在使用 Xcode 8.0 beta 4。
在之前的版本中,UIViewController 有设置状态栏样式的方法
public func preferredStatusBarStyle() -> UIStatusBarStyle
然而,我发现它在 Swift 3 中变成了“Get ONLY varaiable”。
public var preferredStatusBarStyle: UIStatusBarStyle { get }
如何提供在我的 UIViewController 中使用的样式?
这是 iOS 7 及更高版本的首选方法
在您的应用程序中Info.plist,设置View controller-based status bar appearance为YES.
Info.plist
View controller-based status bar appearance
YES
在每个视图控制器中覆盖preferredStatusBarStyle (Apple 文档)。例如:
preferredStatusBarStyle
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
如果您preferredStatusBarStyle根据视图控制器内部的变化(例如,滚动位置或显示的图像是否暗)返回不同的首选状态栏样式,那么您将需要setNeedsStatusBarAppearanceUpdate()在该状态发生变化时调用。
setNeedsStatusBarAppearanceUpdate()
iOS 7 之前的版本,不推荐使用的方法
Apple 已弃用此功能,因此将来会将其删除。使用上面的方法,这样下一个iOS版本发布时就不用重写了。
如果您的应用程序将支持在您的应用程序中Info.plist,设置View controller-based status bar appearance为NO.
NO
在函数中appDelegate.swift,didFinishLaunchingWithOptions添加:
appDelegate.swift
didFinishLaunchingWithOptions
UIApplication.shared.statusBarStyle = .lightContent
对于导航控制器
如果您使用导航控制器,并且希望在应用程序中使用并设置每个视图控制器的首选状态View controller-based status bar appearance栏YES样式info.plist
info.plist
extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { return topViewController?.preferredStatusBarStyle ?? .default } }