• 如何在iOS应用程序中观察暗模式状态
  • 如何应对iOS应用程序中暗模式状态的变化

推荐答案

UIKit拥有UITraitCollection已经有一段时间了.从iOS 9开始,你可以使用UITraitCollection来查看该设备是否支持3D Touch(另一天的悲伤对话)

In iOS 12,UITraitCollection获得了一个新属性:var userInterfaceStyle: UIUserInterfaceStyle,它支持三种情况:lightdarkunspecified

由于UIViewController继承了UITraitenEnvironment,因此您可以访问ViewController的traitCollection.这是userInterfaceStylestore .

UITraitEnviroment还有一些漂亮的协议存根,可以帮助代码在状态发生变化时进行解释(因此当用户从黑暗面切换到Illuminate 面或反之亦然).下面是一个很好的编码示例:

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相关问答推荐

SWIFT设备方向更新不正确

当包含UITextView的inputAccessoryView显示键盘时,iOS UITableView内容会出现UINavigationBar奇怪的错误

底部导航栏在iOS上浮动

SwiftData在获取值时应用程序崩溃:线程1:EXC_BREAKPOINT(代码=1,子代码=0x101e8303c)

安装新版本 XCode 15.0 后无法运行应用程序 XCode

Strange UIView.animate更改UIButton标题 colored颜色 的行为

如何解决错误 HE0004:无法在 Visual Studio 2022 中加载框架ContentDeliveryServices

应用程序被杀死时如何在 flutter ios 应用程序中播放音频?

var name: String 时 print(nil) 和 print(name) 的区别? = 无

包装在 AnyView 中时 UIViewControllerRepresentable 无法正常工作

XCode 14 Beta 中 NavigationStack 的正文渲染问题

Swift 共享数据模型在页面之间进行通信.这个怎么运作

iOS swift从另一个数组中删除一个数组的元素

Xcode 4.1 致命错误:自构建预编译头文件后修改了 stdlib

所有小部件的Flutter 填充?

将自定义对象保存到 NSUserDefaults

NSPredicate 用于测试 NULL 和空白字符串

iOS 7 半透明模态视图控制器

从 UIScrollview 中删除内容和框架布局指南

以编程方式确定 iPhone 是否越狱