【发布时间】:2020-01-02 05:11:30
【问题描述】:
我使用Notifications 在我的应用程序上创建了自己的暗模式系统,并且我有一个可以在暗模式打开和关闭之间切换的开关。
我的第一个问题:如何打开系统暗模式,如果通过翻转开关更新到iOS 13,整个手机也会变为暗模式。
我的第二个问题:如何检查是否启用了系统暗模式,以便我可以在启用 iOS 系统暗模式时启用我的暗模式?
【问题讨论】:
-
第一个问题 - 不可能。
我使用Notifications 在我的应用程序上创建了自己的暗模式系统,并且我有一个可以在暗模式打开和关闭之间切换的开关。
我的第一个问题:如何打开系统暗模式,如果通过翻转开关更新到iOS 13,整个手机也会变为暗模式。
我的第二个问题:如何检查是否启用了系统暗模式,以便我可以在启用 iOS 系统暗模式时启用我的暗模式?
【问题讨论】:
您应该检查UITraitCollection 的userInterfaceStyle 变量,与tvOS 和macOS 上相同。
switch traitCollection.userInterfaceStyle {
case .light: //light mode
case .dark: //dark mode
case .unspecified: //the user interface style is not specified
}
您应该使用UIView/UIViewController的traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)函数来检测界面环境的变化(包括用户界面风格的变化)。
来自Apple Developer Documentation:
iOS界面环境变化时系统调用该方法。根据您的应用程序的需要,在视图控制器和视图中实现此方法,以响应此类更改。例如,当 iPhone 从纵向旋转到横向时,您可能会调整视图控制器的子视图的布局。该方法的默认实现为空。
系统默认 UI 元素(例如 UITabBar 或 UISearchBar)会自动适应新的用户界面样式。
【讨论】:
UIKit 的情况下访问UITraitCollection 吗?
if #available(iOS 13.0, *) {
overrideUserInterfaceStyle = .light // or .dark
} else {
// Fallback on earlier versions
}
用这个方法你会得到亮模式和暗模式,把这个代码放到开关中,你的视图会根据暗和亮的外观变化。
【讨论】: