non*_*tic 7 collections traits ios swift
我的应用程序使用自定义颜色主题,但 iOS13 用户可以选择以下深色模式。
我以为我可以简单地更新我的颜色,ViewController's traitCollectionDidChange()但由于某种原因,这个函数只在用户第一次更改 iOS 设置中的界面样式时调用。虽然这对大多数用户来说可能已经足够了,但理想情况下,traitCollectionDidChange()每次用户更改其 iOS 设置时都应调用。
只是非常基本的:
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)
}
Run Code Online (Sandbox Code Playgroud)
我启动我的应用程序,离开它,在 iOS 设置中更改外观:下次我打开应用程序(打开,不启动)时,上述函数被调用,应用程序更新颜色。现在,当我重复相同的过程时,不再调用该函数。
我发现如果我设置 UIViewController 的overrideUserInterfaceStyle属性,则traitCollectionDidChange不会调用该方法,但是当我不设置此overrideUserInterfaceStyle属性时,则会traitCollectionDidChange调用该方法。
也许UIKit中有一些基于overrideUserInterfaceStyle属性的内部方法调用判断。
希望这有帮助。
| 归档时间: |
|
| 查看次数: |
2901 次 |
| 最近记录: |