Mac*_*ver 2 uiviewcontroller uikit ios swift swift4
实施后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
}
}
Run Code Online (Sandbox Code Playgroud)
jake.lange的建议
您的UINavigationController是设置preferredStatusBarColor的一项。我敢打赌,如果您尝试展示此VC,而不是将其推送到导航控制器,则会看到灯光状态栏样式。
您可能要做的是实现自定义导航控制器并覆盖首选状态栏样式。
class CustomNavController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
根据评论,您可能希望将首选状态栏颜色设置为UINavigationController最顶部的ViewController。这是执行此操作的扩展,使用此扩展,您不再需要上面的CustomNavController类,而只使用了常规的UINavigationController。您还需要在每个视图控制器中覆盖首选的状态栏样式。归因于这个SO问题,请参见此处以了解关于statusbarstyle和导航控制器的更多深入讨论:preferredStatusBarStyle不被调用
extension UINavigationController {
open override var childViewControllerForStatusBarStyle: UIViewController? {
return self.topViewController
}
open override var childViewControllerForStatusBarHidden: UIViewController? {
return self.topViewController
}
}
Run Code Online (Sandbox Code Playgroud)