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

标签 ios swift uiviewcontroller uistatusbar ios-statusbar

我正在使用 Xcode 8.0 beta 4。

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

public func preferredStatusBarStyle() -> UIStatusBarStyle

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

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

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

最佳答案

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

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

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

覆盖每个 View Controller 中的 preferredStatusBarStyle ( Apple docs )。例如:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

如果您有 preferredStatusBarStyle 根据 View Controller 内部发生的变化(例如,滚动位置或显示的图像是否黑暗)返回不同的首选状态栏样式,那么您当状态改变时,将要调用 setNeedsStatusBarAppearanceUpdate()

iOS 7之前的版本,弃用方法

Apple has deprecated this ,所以它会在未来被移除。使用上面的方法,下个iOS版本发布的时候就不用重写了。

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

appDelegate.swift中,didFinishLaunchingWithOptions函数中,添加:

UIApplication.shared.statusBarStyle = .lightContent

对于导航 Controller

如果您使用导航 Controller 并且希望使用每个 View Controller 的首选状态栏样式,请将 View controller-based status bar appearance 设置为 YES您的应用程序的 info.plist

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

关于ios - 如何在 Swift 3 中设置状态栏样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38740648/

相关文章:

ios - 需要在带有自定义单元格的tableView中的viewDidLoad中实现委托(delegate)方法

ios - iOS中的自定义日期选择器

ios - 有没有办法自动将 UITextField 绑定(bind)到我的数据模型中的变量?

C++ std::locale ("en") 在 iOS 上抛出异常

ios - 我是否需要实现导航 Controller 才能添加其他 Controller 的 View ?

iphone - 选择 tabview 时获取正确的 UIViewController 实例 - IOS

ios - 在 Swift 和 AVPlayer 中显示音频流的图稿?

ios - 如何快速制作不同形状的 ImageView

swift - 使用 EntryView() 的 setValue 代替 setPlaceholder

ios - 从许多不同的 ViewController 中呈现 ViewController 的最佳方式