dark/light 模式更改时可以重新加载应用程序吗?
Possible to reload app when dark/light mode changes?
我的应用广泛使用了 CAGradientLayers,当切换 dark/light 模式时,CAGradientLayers 显然不会自动更新它们的颜色。不过,当应用程序关闭并重新打开时,它们会更新颜色。
我知道我可以使用以下代码来检测更改并单独重新加载每个视图
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
//
}
不过,我正在寻找不需要我单独更新每个视图的修复程序。有没有办法检测 light/dark 模式更改(可能在应用程序委托中)并强制整个应用程序自行重新加载(就好像它已被强制关闭并重新打开一样)?
您可以创建一个覆盖 traitCollectionDidChange
的超级 class UIViewController
这种方式"reload your app"没办法。出现这个问题是因为CAGradientLayer
使用了CGColor
,没有动态适配系统样式
我通过在实现 traitCollectionDidChange
的渐变层周围包装 UIView
来相应地更新渐变的颜色,从而解决了这个问题。也许你可以这样做并将其用作子视图而不是子层。
我的应用广泛使用了 CAGradientLayers,当切换 dark/light 模式时,CAGradientLayers 显然不会自动更新它们的颜色。不过,当应用程序关闭并重新打开时,它们会更新颜色。
我知道我可以使用以下代码来检测更改并单独重新加载每个视图
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
//
}
不过,我正在寻找不需要我单独更新每个视图的修复程序。有没有办法检测 light/dark 模式更改(可能在应用程序委托中)并强制整个应用程序自行重新加载(就好像它已被强制关闭并重新打开一样)?
您可以创建一个覆盖 traitCollectionDidChange
这种方式"reload your app"没办法。出现这个问题是因为CAGradientLayer
使用了CGColor
,没有动态适配系统样式
我通过在实现 traitCollectionDidChange
的渐变层周围包装 UIView
来相应地更新渐变的颜色,从而解决了这个问题。也许你可以这样做并将其用作子视图而不是子层。