状态栏使用拆分视图控制器,导航控制器中不显示轻量内容

时间:2017-09-29 09:00:13

标签: ios swift ios11

添加状态栏作为轻量级内容时。它在登录屏幕上显得很好。它在登录屏幕中变为白色。成功登录后,我有一个拆分视图和导航控制器。

我添加了代码但仍显示黑色。

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
        }
    }
}

我已经添加并尝试了每个但仍显示黑色状态栏。

3 个答案:

答案 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
      }

你可以走了。如果您有任何疑问,请评论