Swift 4 - 特定视图控制器状态栏样式不变
Posted
技术标签:
【中文标题】Swift 4 - 特定视图控制器状态栏样式不变【英文标题】:Swift 4 - Specific View Controller status bar style not changing 【发布时间】:2018-11-12 11:48:24 【问题描述】:在实现UIViewController
之后,状态栏内容的颜色似乎由于某种原因没有改变(仍然保持黑色)。如何仅使用 Swift 4.0 仅针对这个特定的UIViewController
以编程方式将其更改为“浅色”模式(白色)?不是整个应用程序。
ViewController.swift 类
import UIKit
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = UIColor.blue
self.title = "Hello World"
self.navigationController?.navigationBar.barTintColor = UIColor.gray
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic
self.navigationController?.navigationBar.largeTitleTextAttributes = [
NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .largeTitle)
]
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
jake.lange 的建议
【问题讨论】:
@MaihanNijat 我希望状态栏内容是白色而不是黑色。 ***.com/questions/39802420/… Change Status Bar Background Color in Swift 3的可能重复 那是 Swift 3,我用的是 Swift 4 它对 4 不起作用? 【参考方案1】:您的 UINavigationController 是设置首选状态栏颜色的一个。我敢打赌,如果您尝试展示此 VC 而不是将其推送到导航控制器,您会看到灯光状态栏样式。
您可能想要做的是实现自定义导航控制器并覆盖首选状态栏样式。
class CustomNavController: UINavigationController
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent;
编辑:
基于 cmets,您可能希望将首选状态栏颜色设置为 UINavigationController 最顶部的任何 ViewController。这是一个可以做到这一点的扩展,有了这个扩展,您不再需要上面的 CustomNavController 类,只需使用常规的 UINavigationController。您还需要覆盖每个视图控制器中的首选状态栏样式。感谢这个 SO 问题,有关状态栏样式和导航控制器的更深入讨论,请参见此处:preferredStatusBarStyle isn't called
extension UINavigationController
open override var childViewControllerForStatusBarStyle: UIViewController?
return self.topViewController
open override var childViewControllerForStatusBarHidden: UIViewController?
return self.topViewController
【讨论】:
由于某种原因无法正常工作。请参阅上面的最新屏幕截图。 你的错误是这一行window?.rootViewController = UINavigationController(rootViewController: CustomNavigationController())
。改为window?.rootViewController = CustomNavigationController(rootViewController: ViewController())
然后出现此错误:Use of unresolved identifier 'CustomNavigationController'
抱歉,这是我的拼写错误。固定线路为window?.rootViewController = CustomNavController(rootViewController: ViewController())
如果我想要不同NavigationController
的默认状态栏颜色(黑色)怎么办?我该怎么做?【参考方案2】:
如果此标志“基于控制器的状态栏外观”设置为 NO,您能否检查 Info.plist 文件。它需要设置为 YES 以允许基于视图控制器的外观。
【讨论】:
【参考方案3】:为我工作:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
self.navigationController?.navigationBar.barStyle = .blackTranslucent
self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
【讨论】:
以上是关于Swift 4 - 特定视图控制器状态栏样式不变的主要内容,如果未能解决你的问题,请参考以下文章