【发布时间】:2021-02-13 10:47:25
【问题描述】:
如何自动重置页面上所有子视图的颜色?
我正在定义暗模式颜色,如下所示:
static let textColor: UIColor = UITraitCollection.current.userInterfaceStyle == .light ? .black : .white
如果用户在暗模式自动发生时打开了应用程序(基于用户的设置),那么颜色不会改变。您必须关闭应用并重新打开它才能看到暗模式。
如何自动重置页面上所有子视图的颜色?
这是我尝试过的:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
view.layoutSubviews()
view.subviews.forEach {$0.layoutSubviews()}
}
LayoutSubviews 不会重置颜色。
有什么想法吗?
谢谢!
【问题讨论】:
-
将此标记为重复 - 请参阅stackoverflow.com/questions/56435720/… 中的第二个代码 sn-p - 如果您提出不同的要求,我很乐意删除我的 dup 投票。 (1) 我没有在您的代码中看到对
.userInterfaceStyle的检查。 (2) 应该不需要调用layoutSubviews,只需更改您需要的明暗,让操作系统完成工作。 -
这没有帮助。检查是在颜色上。如何重置视图以便重新应用背景颜色?
-
也许我还是不明白.....检查的是颜色?那不是光明或黑暗——这是别的什么?如果是这样,那您为什么要声明“深色模式颜色”并查看特征集合?请更具体一点。举一个更好的例子,一个可以重复的例子。
标签: swift ios-darkmode