添加状态栏作为轻量级内容时。它在登录屏幕上显得很好。它在登录屏幕中变为白色。成功登录后,我有一个拆分视图和导航控制器。
我添加了代码但仍显示黑色。
1)在视图控制器中添加以下行。
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
2)info.plist
View controller-based status bar appearance -> NO
3)然后遇到了这一行,并添加了这一行。
controller.navigationController?.navigationBar.barTintColor = UIColor.white
4)然后遇到一篇文章,如果我们需要更改导航中的状态栏但是仍然没有任何作用,则会提到添加扩展名
extension UINavigationController
{
override open var preferredStatusBarStyle: UIStatusBarStyle {
get {
return .lightContent
}
}
}
我已经添加并尝试了每个但仍显示黑色状态栏。
答案 0 :(得分:0)
试试这个
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
答案 1 :(得分:0)
还有另一种方法可以做同样的事情。
self.navigationController?.navigationBar.barStyle = .black
这背后的想法是UIBarStyle
计算出UIStatusBar
的内容颜色。通过.black
后,它会确定背景为黑色,并且需要UIStatusBarStyleLightContent
模式。当你通过.default
时,它会发现背景很亮,并返回黑色内容或UIStatusBarStyleDefault
。
答案 2 :(得分:0)
导航控制器也有同样的问题。 但我如下解决。
第 1 步:创建自定义导航类
import UIKit
class CustomNavigationController: UINavigationController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
appearance.backgroundColor = .systemIndigo
navigationBar.standardAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
navigationBar.prefersLargeTitles = true
}
}
第 2 步:使用此类为您的 NavigationColtroller 子类化。
步骤 3: 转到嵌入导航控制器的 ViewController。
Stpe4:将这行代码放在 viewDidLoad()
// MARK:- Lifecycle Methods
override func viewDidLoad() {
self.navigationController?.navigationBar.barStyle = .black
}
第五步:你可以在 ViewController 中重写一个方法
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
你可以走了。如果您有任何疑问,请评论