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 模式变化。如果您想定义自己的,最简单的方法是使用资产目录。当您在那里添加颜色时,您可以分别定义它在浅色和深色模式下的外观。
如何自动重置页面上所有子视图的颜色?
我正在定义暗模式颜色,这样做是这样的:
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 模式变化。如果您想定义自己的,最简单的方法是使用资产目录。当您在那里添加颜色时,您可以分别定义它在浅色和深色模式下的外观。