Swift:如果 TraitCollection.userInterfaceStyle == .unspecified,如何确定它是处于浅色模式还是深色模式?

hel*_*and 5 ios swift mapbox-ios ios-darkmode

在我的应用程序的设置中,用户可以在 3 个系统主题之间进行选择:浅色、深色或默认(与手机的主题相匹配)。

我通过查找深色模式、浅色模式和默认keyWindow设置来实现此目的。overrideUserInterfaceStyle = .darkoverrideUserInterfaceStyle = .lightoverrideUserInterfaceStyle = .unspecified

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

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

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

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

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

小智 8

您可以使用UIScreen.main.traitCollection.userInterfaceStyle来获取当前设备主题,而与窗口上覆盖的外观无关。