我的应用程序使用自定义颜色主题,但iOS13用户可以选择以下深色模式。
我以为我可以在ViewController's
traitCollectionDidChange()
中更新颜色,但是由于某些原因,此功能仅在用户第一次在iOS设置中更改界面样式时才调用。
尽管这对于大多数用户而言已足够,但理想情况下,每次用户更改其iOS设置时都应调用traitCollectionDidChange()
。
只是非常基本的:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
print(#function)
guard traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle else { return }
NotificationCenter.default.post(name: NSNotification.Name(Keys.Notifications.updateColorTheme), object: nil)
}
我启动我的应用程序,保留它,在iOS设置中更改外观:下次我打开该应用程序(打开而不是启动)时,将调用上述功能,并且该应用程序会更新颜色。
现在,当我重复相同的过程时,不再调用该函数。
最佳答案
我发现,如果设置UIViewController的overrideUserInterfaceStyle
属性,则不会调用traitCollectionDidChange
方法,但是,当我不设置此overrideUserInterfaceStyle
属性时,就会调用traitCollectionDidChange
。
也许在UIKit中有一些基于overrideUserInterfaceStyle
属性的内部方法调用判断器。
希望对您有所帮助。