我正在使用 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/