TableView标头中的边框在暗模式下更改颜色

时间:2020-03-13 03:31:12

标签: ios swift xcode

我遇到的问题是标题视图上有一个边框,该边框在黑暗模式下没有改变颜色。我了解这是因为我正在使用CGColour,但是在我在函数内部创建图层时不确定如何解决此问题。创建一个完整的新文件以容纳边框视图以实现set describe_field_name_in_uppercase to on; 似乎很麻烦。我该如何解决?

traitCollectionDidChange()

1 个答案:

答案 0 :(得分:0)

您需要进行 some 布置,以便在更改特征收集时得到通知,以便使图层重绘其边框颜色。它不会自己发生,并且willDisplayHeaderView也不会因为模式改变而再次被神奇地调用。

这是一个简单的iOS项目,展示了一个CALayer,它可以在trait集合更改时听到并相应地调整其自身的边框颜色:

class MyLayer : CALayer {
    override init(layer: Any) {
        super.init(layer:layer)
    }
    override init() {
        super.init()
        self.borderColor = UIColor(named: "MyCoolColor")!.cgColor
        NotificationCenter.default.addObserver(self, selector: #selector(changed), name: Notification.Name(rawValue: "traitCollectionDidChange"), object: nil)
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    @objc func changed(_:Notification) {
        self.borderColor = UIColor(named: "MyCoolColor")!.cgColor
    }
}
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let layer = MyLayer()
        layer.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
        layer.borderWidth = 5
        self.view.layer.addSublayer(layer)
    }
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if self.traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            NotificationCenter.default.post(name: Notification.Name(rawValue: "traitCollectionDidChange"), object: self)
        }
    }
}