Swift 4 - 特定视图控制器状态栏样式不变

时间:2018-06-02 15:50:44

标签: ios swift uiviewcontroller uikit swift4

实施UIViewController后,由于某种原因,状态栏内容颜色似乎没有变化(仍然是黑色)。如何仅以此特定UIViewController使用Swift 4.0以编程方式将其更改为“光”模式(白色)?不是整个申请。

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

enter image description here

jake.lange的建议

enter image description here

3 个答案:

答案 0 :(得分:5)

你的UINavigationController是设置preferredStatusBarColor的那个。我敢打赌,如果您尝试使用此VC而不是将其推送到导航控制器,您将看到灯状态栏样式。

您可能想要做的是实现自定义导航控制器并覆盖首选状态栏样式。

for h in df['user'].unique():
    g = Counter(df['class'])
    print (g)

编辑:

根据评论,您可能要做的是将首选状态栏颜色设置为ViewController是UINavigationController的最顶层。这是一个扩展,使用此扩展,您不再需要上面的CustomNavController类,只使用常规的UINavigationController。您还需要覆盖每个视图控制器中的首选状态栏样式。相信这个SO问题,请参阅此处以了解有关statusbarstyle和导航控制器的更多深入讨论:preferredStatusBarStyle isn't called

Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})
Counter({4: 3062, 1: 1250, 0: 393, 3: 281, 2: 13})

答案 1 :(得分:1)

如果此标志“查看基于控制器的状态栏外观”设置为NO,您可以检查Info.plist文件吗?需要将其设置为YES以允许基于视图控制器的外观。

答案 2 :(得分:0)

为我工作:

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
}