Как динамически предоставлять CGColor при переключении темного / светлого режима?

Я установил динамический UIColors для 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
}

Это работает, но я заметил, что после изменения режима в настройках, если я использую жест смахивания снизу, чтобы переключиться обратно в свое приложение, я вижу, что все UIColors уже обновлены на входящем экране, но CGColors обновляются только тогда, когда приложение фактически выходит на передний план и вызывается traitCollectionDidChange.

введите здесь описание изображения

Есть ли лучший подход к этому, чтобы CGColors также немедленно обновлялись?


person Matej Ukmar    schedule 19.12.2019    source источник
comment
Может быть, это будет полезно: stackoverflow.com/questions/56487679/   -  person Kishan Bhatiya    schedule 19.12.2019


Ответы (1)


перейдите в Xcode> Assets.xcassets> новый набор цветов> установите цвет для светлого и темного внешнего вида

теперь установите этот цвет в цвет фона представления

self.view.backgroundColor = UIColor.init(named: "ColorForCameraScreen")

введите описание изображения здесь

person Milan Aghera    schedule 19.12.2019
comment
Привет! Добро пожаловать в StackOverflow! Вы можете использовать справку по форматированию, чтобы встроить изображение. - person Lapshin Dmitry; 19.12.2019
comment
У меня проблема с цветом логотипа, фон устанавливается правильно, поскольку он использует UIColor с динамическим поставщиком, проблема с логотипом, где цвет установлен с CGColor, а не UIColor - person Matej Ukmar; 19.12.2019