4

我的应用程序广泛使用了 CAGradientLayers,当切换暗/亮模式时,它们显然不会自动更新它们的颜色。当应用程序关闭并重新打开时,它们会更新颜色。

我知道我可以使用以下代码来检测更改并单独重新加载每个视图

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        // 
    }

但是,我正在寻找不需要我单独更新每个视图的修复程序。有没有办法检测亮/暗模式更改(可能在应用程序委托内)并强制整个应用程序重新加载(好像它已被强制关闭并重新打开)?

4

2 回答 2

5

没有办法以这种方式“重新加载您的应用程序”。出现问题的原因是CAGradientLayeruses CGColor,它不能动态适应系统样式。

我通过在渐变层周围包裹 a 解决了这个问题,UIView该渐变层实现traitCollectionDidChange了相应地更新渐变的颜色。也许您可以这样做并将其用作子视图而不是子层。

于 2019-10-24T16:17:10.167 回答
1

您可以创建一个覆盖的超类 UIViewControllertraitCollectionDidChange

于 2019-10-24T15:53:49.253 回答