一尘不染

如何在Swift 3中设置状态栏样式

swift

我正在使用Xcode 8.0 beta 4。

在以前的版本中,UIViewController具有设置状态栏样式的方法

public func preferredStatusBarStyle() -> UIStatusBarStyle

但是,我发现它在Swift 3中变成了“只获取变量”。

public var preferredStatusBarStyle: UIStatusBarStyle { get }

如何提供在UIViewController中使用的样式?


阅读 231

收藏
2020-07-07

共1个答案

一尘不染

[更新]适用于Xcode 10+和Swift 4.2+

这是iOS 7及更高版本的首选方法

在您的应用程序中Info.plist,将设置View controller-based status bar appearanceYES

在每个视图控制器中覆盖preferredStatusBarStyle
Apple文档)。例如:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

如果preferredStatusBarStyle根据视图控制器内部发生的更改返回了不同的首选状态栏样式(例如,滚动位置或显示的图像是否暗),那么您将需要setNeedsStatusBarAppearanceUpdate()在状态更改时调用。

iOS 7之前的版本,不建议使用的方法

苹果已弃用此功能,因此将来会删除它。使用上述方法,以便在下一个iOS版本发布时不必重写它。

如果您的应用程序将支持在您的应用程序中Info.plist,请设置View controller-based status bar appearanceNO

appDelegate.swiftdidFinishLaunchingWithOptions功能,加上:

UIApplication.shared.statusBarStyle = .lightContent

对于导航控制器

如果您使用导航控制器,并且希望使用每个视图控制器的首选状态栏样式并将其设置View controller-based status bar appearanceYES应用程序的info.plist

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}
2020-07-07