如何在 iOS 中检查暗模式? [复制]
Posted
技术标签:
【中文标题】如何在 iOS 中检查暗模式? [复制]【英文标题】:How to check for Dark Mode in iOS? [duplicate] 【发布时间】:2019-10-20 18:45:22 【问题描述】: 如何在 ios 应用中观察暗模式状态 如何对 iOS 应用中暗模式状态的变化做出反应【问题讨论】:
Here 了解如何使用 SwiftUI。 【参考方案1】:您可以使用以下代码检查项目中的明暗模式:
func viewDidLoad()
super.viewDidLoad()
switch traitCollection.userInterfaceStyle
case .light, .unspecified:
// light mode detected
case .dark:
// dark mode detected
您还可以检查界面样式的变化:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
super.traitCollectionDidChange(previousTraitCollection)
let userInterfaceStyle = traitCollection.userInterfaceStyle // Either .unspecified, .light, or .dark
// Update your user interface based on the appearance
就像自 Mojave 以来在 macOS 中一样,您可以在资产目录中为明暗模式定义图像,以便自动使用这些图像:
取自here。
【讨论】:
【参考方案2】:UIKit 已经有一段时间了。从 iOS 9 开始,您可以使用 UITraitCollection 来查看设备是否支持 3D Touch(又是一个悲伤的对话)
In iOS 12,UITraitCollection 获得了一个新属性:var userInterfaceStyle: UIUserInterfaceStyle
,它支持三种情况:light
、dark
和 unspecified
由于 UIViewController 继承了 UITraitEnvironment,因此您可以访问 ViewController 的traitCollection
。这个存储userInterfaceStyle
。
UITraitEnviroment 也有一些漂亮的协议存根,可以帮助您的代码解释何时发生状态更改(因此当用户从黑暗面切换到光明面时,反之亦然)。这是一个很好的编码示例:
class MyViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
if self.traitCollection.userInterfaceStyle == .dark
// User Interface is Dark
else
// User Interface is Light
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
// Trait collection has already changed
override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator)
// Trait collection will change. Use this one so you know what the state is changing to.
【讨论】:
我以为 iOS 13 中引入了深色模式? @אוריorihpt 你是对的developer.apple.com/design/human-interface-guidelines/ios/… 是的,但UITraitCollection 属性是在iOS 12 中引入的以上是关于如何在 iOS 中检查暗模式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS Xcode Swift Playground 上模拟暗模式