如何以编程方式检查ios设备的当前userInterfaceStyle?

时间:2019-08-29 07:13:09

标签: ios swift ios13 ios-darkmode

我能够使用任何视图或ViewController的TraitCollection获取userInterfaceStyle。黑暗或光明。但是,当我强制应用程序使用“暗”或“亮”模式时,那么我想知道与设备无关的iOS设备当前的userInterfaceStyle是什么?

我尝试了UIScreen的Traitcollection,但仍提供应用程序的userInterfaceStyle而不是设备。

2 个答案:

答案 0 :(得分:7)

尝试UIScreen.main,举5个例子:

// OS-wide theme available on iOS 13.
@available(iOS 13.0, *)
var osTheme: UIUserInterfaceStyle {
    return UIScreen.main.traitCollection.userInterfaceStyle
}

答案 1 :(得分:0)

如果您有多个ViewController或Windows,并且希望界面样式是动态的(或者像您所使用的情况一样,则锁定了),我会争辩说使用traitCollectionDidChange(_:)回调并查看属性{ {1}}。这将反映界面样式的当前状态(即使已锁定)。请记住,子视图控制器将继承其父视图的设置。

这样,您可以将代码设计为正确运行,具体取决于当前从->转换为的界面样式。以下示例将在自定义UIViewControllers和自定义UIViews中工作。

示例(Swift 4):

userInterfaceStyle