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