Swift 如何重置页面上所有子视图的颜色?

Swift How can you reset the colors of all the subviews on a page?

如何自动重置页面上所有子视图的颜色?

我正在定义暗模式颜色,这样做是这样的:

    static let textColor: UIColor = UITraitCollection.current.userInterfaceStyle == .light ? .black : .white

如果用户在暗模式自动发生(基于用户的设置)时打开应用程序,则颜色不会改变。您必须关闭应用程序并重新打开它才能看到深色模式。

如何自动重置页面上所有子视图的颜色?

这是我试过的:

 override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)
    view.layoutSubviews()
    view.subviews.forEach {[=12=].layoutSubviews()}
}

LayoutSubviews 不重置颜色。

有什么想法吗?

谢谢!

您需要使用动态颜色才能让它们自动适应。这里

UITraitCollection.current.userInterfaceStyle == .light ? .black : .white

你在那一刻检查界面样式并设置颜色,但当特征环境改变时,该代码不会re-evaluated自动。

相反,您可以使用其中一种系统颜色(如 .background.label),它将自动适应 dark/light 模式变化。如果您想定义自己的,最简单的方法是使用资产目录。当您在那里添加颜色时,您可以分别定义它在浅色和深色模式下的外观。