Swift:如果 traitCollection.userInterfaceStyle == .un指定,我如何确定它是处于亮模式还是暗模式?



在我的app设置中,用户可以选择三种系统主题:浅色、深色或默认(与手机的主题相匹配)。

我通过找到keyWindow并将overrideUserInterfaceStyle = .dark设置为暗模式,overrideUserInterfaceStyle = .light设置为亮模式,overrideUserInterfaceStyle = .unspecified设置为默认模式来做到这一点。

问题是我在我的应用程序中使用MapBox,我有一个darkStyleURL和一个lightStyleURL。当用户选择一个主题时,我更新样式url如下:

self.styleURL = self.traitCollection.userInterfaceStyle == .dark ? URL(string: darkStyleURL) : URL(string: lightStyleURL)

但是这样做的问题是如果用户选择了default作为主题,traitCollection.userInterfaceStyle将等于.unspecified。因此,当上面的代码触发时,它将使用lightStyleURL,即使用户的设备处于黑暗模式。

所以我的问题是,设置overrideUserInterfaceStyle = .unspecified后,是否有另一种方法来确定用户的设备主题?

或者是否有更好的方法来处理匹配设备主题或在所有三个选项之间切换的用例?任何帮助都将不胜感激。谢谢!

您可以使用UIScreen.main.traitCollection.userInterfaceStyle获得独立于窗口上覆盖的外观的当前设备主题。

最新更新