小编典典

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

all

我正在使用 Xcode 8.0 beta 4。

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

public func preferredStatusBarStyle() -> UIStatusBarStyle

然而,我发现它在 Swift 3 中变成了“Get ONLY varaiable”。

public var preferredStatusBarStyle: UIStatusBarStyle { get }

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


阅读 122

收藏
2022-07-02

共1个答案

小编典典

[更新] Xcode 10+ & Swift 4.2+

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

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

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

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

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

iOS 7 之前的版本,不推荐使用的方法

Apple
已弃用此功能
,因此将来会将其删除。使用上面的方法,这样下一个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
   }
}
2022-07-02