Я установил динамический UIColor
s для OS13 в моем приложении Swift для обработки темного режима.
Например:
static var background: UIColor {
if #available(iOS 13, *) {
return UIColor { (traitCollection: UITraitCollection) -> UIColor in
if traitCollection.userInterfaceStyle == .dark {
return UIColor(hex: "2b2d42")
} else {
return UIColor(hex: "FFFFFF")
}
}
} else {
return UIColor(hex: "FFFFFF")
}
}
И везде, где в коде используется CGColor
вместо UIColor
, я планировал вызвать traitCollectionDidChange
этого конкретного UIView
, например, так:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
layer.fillColor = color.cgColor
}
Это работает, но я заметил, что после изменения режима в настройках, если я использую жест смахивания снизу, чтобы переключиться обратно в свое приложение, я вижу, что все UIColor
s уже обновлены на входящем экране, но CGColor
s обновляются только тогда, когда приложение фактически выходит на передний план и вызывается traitCollectionDidChange
.
Есть ли лучший подход к этому, чтобы CGColor
s также немедленно обновлялись?