swift iOS中的UINavigation状态栏颜色变化[重复]
Posted
技术标签:
【中文标题】swift iOS中的UINavigation状态栏颜色变化[重复]【英文标题】:UINavigation Status bar color change in swift iOS [duplicate] 【发布时间】:2019-08-08 11:06:10 【问题描述】:我的一个控制器的导航状态栏颜色为黑色,我想将其设为白色。我怎样才能改变它?
【问题讨论】:
【参考方案1】:正如一些人已经建议的那样,在您的 viewController 集中:
override var preferredStatusBarStyle: UIStatusBarStyle return .lightContent
但是,这还不够。由于该 viewController 包含在 UINavigationController 中,因此您需要告诉导航控制器使用基于当前显示控制器的状态栏样式。一种方法是像这样扩展 UINavigationController:
extension UINavigationController
open override var preferredStatusBarStyle: UIStatusBarStyle
return topViewController?.preferredStatusBarStyle ?? .default
【讨论】:
【参考方案2】:preferredStatusBarStyle 属性设置为 lightContent。 Build and Run 项目,看到状态栏的内容变亮了。
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
状态栏的内容又变暗了,这是默认的。原因是,ios 要求导航控制器的状态栏样式,而不是包含的视图控制器。
要将导航控制器的样式更改为应用程序内部的灯光,请添加以下 viewDidAppear(_:) 方法override func viewDidAppear(_ animated: Bool)
navigationController?.navigationBar.barStyle = .black
【讨论】:
【参考方案3】:将 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
【讨论】:
【参考方案4】:默认情况下,我们可以在项目 plist 中设置状态栏样式,但是如果您想为特定控制器定义颜色,那么我们应该在您的控制器类中覆盖以下方法。
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
希望对你有帮助:)
【讨论】:
【参考方案5】:在你的 ViewController 中调用它:
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
为 Swift 5 更新:
override var preferredStatusBarStyle: UIStatusBarStyle
.lightContent
另外,如果您还没有这样做,您应该将 info.plist 文件中的 View controller-based status bar appearance 属性设置为 YES。
【讨论】:
以上是关于swift iOS中的UINavigation状态栏颜色变化[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Swift iOS:UINavigationcontroller 中的 UIPageControl
swift 4.2 ios 12中的状态栏模糊视图(半透明)
iOS关于UITabView和UIAlertController,UIAlertAction以及UINavigation,值修改的传递页面推送
如何在Objective C中的UIViewController上添加UITabbar控制器和UINavigation bar