выдача cgColor переключение в темном режиме iOS 13 - PullRequest
0 голосов
/ 27 февраля 2020

У меня проблемы с переключением цветов при изменении режима в iOS 13.

Проблема в том, что вы видите приложение в последних приложениях. UIColors изменится, но cgColor не изменится.

Он изменится эффективно, когда вы откроете приложение, но только в последнее время он не изменится.

Я использую метод "traitCollectionDidChange", как упомянуто в следующий документ Apple. https://developer.apple.com/documentation/xcode/supporting_dark_mode_in_your_interface


Пожалуйста, посмотрите видео, чтобы понять более ясно https://www.youtube.com/watch?v=C-pcVuPMQ9U&feature=youtu.be


class ViewController: UIViewController {

    @IBOutlet weak var viewColor: UIView!
    let layerColor = CALayer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        setLayer()
        setColors()
    }

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)

        if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
            setColors()
        }
    }

    func setColors() {
        layerColor.backgroundColor = UIColor(named: "layerColor")?.cgColor
    }

    func setLayer() {
        layerColor.frame = CGRect(x: 0, y: 0, width: 40, height: 40)
        viewColor.layer.addSublayer(layerColor)
    }
}

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Для cgColor вам нужно использовать

layerColor.backgroundColor = UIColor(named: "layerColor")?.resolvedColor(with: self.traitCollection).cgColor
0 голосов
/ 27 февраля 2020

все ваше приложение с одной строкой решения здесь

просто вы поместите эту строку в файл appDelegate

if #available(iOS 13.0, *) {
    window?.overrideUserInterfaceStyle = .light
}

ИЛИ . Вы можете добавить в info.plist, как это

<key>UIUserInterfaceStyle</key>
<string>Light</string>
...