【发布时间】:2019-08-08 11:06:10
【问题描述】:
【问题讨论】:
标签: ios swift uinavigationbar uinavigationcontroller
【问题讨论】:
标签: ios swift uinavigationbar uinavigationcontroller
正如一些人已经建议的那样,在您的 viewController 集中:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
但是,这还不够。由于该 viewController 包含在 UINavigationController 中,因此您需要告诉导航控制器使用基于当前显示控制器的状态栏样式。一种方法是像这样扩展 UINavigationController:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
【讨论】:
preferredStatusBarStyle 属性设置为 lightContent。 Build and Run 项目,看到状态栏的内容变亮了。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
状态栏的内容又变暗了,这是默认的。原因是,iOS 要求导航控制器的状态栏样式,而不是包含的视图控制器。
override func viewDidAppear(_ animated: Bool) {
navigationController?.navigationBar.barStyle = .black
}
【讨论】:
将 viewWillAppear 添加到您的代码中
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.white
}
let img = UIImage()
navigationController?.navigationBar.shadowImage = img
navigationController?.navigationBar.setBackgroundImage(img, for: UIBarMetrics.default)
navigationController?.navigationBar.backgroundColor = UIColor.white
navigationController?.navigationBar.barTintColor = UIColor.white
}
【讨论】:
默认情况下,我们可以在项目 plist 中设置状态栏样式,但是如果您想为特定控制器定义颜色,那么我们应该在您的控制器类中覆盖以下方法。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
希望对你有帮助:)
【讨论】:
在你的 ViewController 中调用它:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
为 Swift 5 更新:
override var preferredStatusBarStyle: UIStatusBarStyle {
.lightContent
}
另外,如果您还没有这样做,您应该将 info.plist 文件中的 View controller-based status bar appearance 属性设置为 YES。
【讨论】: