traitCollectionDidChange

traitCollectionDidChange

我的应用程序使用自定义颜色主题,但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属性的内部方法调用判断器。

希望对您有所帮助。

08-05 13:46