深色模式不会立即更新

Dark mode don't update instantly

我已经在我的 iOS 应用程序中实现了 dark mode,虽然它可以运行,但更改不会立即发生。我认为这与 views 没有像在 android 中那样一直重新创建自己有关。

例如,退出应用程序,然后进入设置和更改主题,然后再次返回应用程序是行不通的。这些变化只是发生在苹果相关的框架上,比如 alertControllers。要使 dark mode 正常工作,我必须点击周围的新 view,然后再次返回旧的 view

我曾尝试在委托中添加 dark mode 代码,因为我认为每次您重新进入应用程序时都会 运行,但事实并非如此。

那么,关于如何使这项工作有任何想法吗?例如,每次我重新进入应用程序时是否有一个代表 运行,或者我是否可以让观察者观察 dark mode 变化?

警报视图控制器会更新,因为它们的文本和背景使用响应式系统颜色,默认情况下具有浅色和深色模式的版本,并在模式更改后自动更新。

如果您使用颜色和图像资源,您可以对自定义视图执行相同的操作。这是对如何做事的一个很好的概述:Medium Article.

Apple 官方文档也很好地概述了如何支持深色模式:Supporting Dark Mode in Your Interface

您可以实施此方法以 "listen" 更改 TraitCollection:

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    // do whatever you want to do 
}

此外,正如 Gergely 提到的,尝试使用 xcassets 来处理颜色和图像,以便它们根据当前的 TraitCollection 动态变化。