iOS 13黑暗模式:traitCollectionDidChange仅在第一次调用

时间:2019-10-25 11:39:16

标签: ios swift collections traits

我的应用程序使用自定义颜色主题,但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设置中的外观:下次我打开该应用程序(打开而不是启动)时,将调用上述功能,并且该应用程序会更新颜色。 现在,当我重复相同的过程时,不再调用该函数。

1 个答案:

答案 0 :(得分:1)

我发现,如果设置UIViewController的overrideUserInterfaceStyle属性,则不会调用traitCollectionDidChange方法,但是当我未设置此overrideUserInterfaceStyle属性时,traitCollectionDidChange是叫。

也许在UIKit中有一些基于overrideUserInterfaceStyle属性的内部方法调用判断器。

希望获得帮助。