Swift:如果traitCollection.userInterfaceStyle == .unspecified,我如何确定它是处于亮模式还是暗模式?
Swift: If traitCollection.userInterfaceStyle == .unspecified, how do I determine if it's in light or dark mode?
在我的应用程序的设置中,用户可以在 3 个系统主题之间进行选择:浅色、深色或默认(与 phone 的主题匹配)。
我通过找到 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 EVEN IF 用户的设备处于暗模式。
所以我的问题是,设置后overrideUserInterfaceStyle = .unspecified
是否有另一种方法来确定用户的设备主题?
或者是否有更好的方法来处理匹配设备主题或在所有三个选项之间切换的用例?任何帮助将不胜感激。谢谢!
您可以使用 UIScreen.main.traitCollection.userInterfaceStyle
获取与 window 上的覆盖外观无关的当前设备主题。
在我的应用程序的设置中,用户可以在 3 个系统主题之间进行选择:浅色、深色或默认(与 phone 的主题匹配)。
我通过找到 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 EVEN IF 用户的设备处于暗模式。
所以我的问题是,设置后overrideUserInterfaceStyle = .unspecified
是否有另一种方法来确定用户的设备主题?
或者是否有更好的方法来处理匹配设备主题或在所有三个选项之间切换的用例?任何帮助将不胜感激。谢谢!
您可以使用 UIScreen.main.traitCollection.userInterfaceStyle
获取与 window 上的覆盖外观无关的当前设备主题。