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

呈现页面时出现 UiNavigation 错误

swift 4.2 ios 12中的状态栏模糊视图(半透明)

应用程序的 ios 11 颜色(uinavigation)

iOS关于UITabView和UIAlertController,UIAlertAction以及UINavigation,值修改的传递页面推送

如何在Objective C中的UIViewController上添加UITabbar控制器和UINavigation bar