作者:流丶血的卓洛 | 来源:互联网 | 2022-10-22 10:02
从iOS / iPadOS 13开始,提供了深色用户界面样式,类似于macOS Mojave中引入的深色模式。如何检查用户是否已启用系统范围的暗模式?
1> Tamás Sengel..:
您应该检查的userInterfaceStyle
变量UITraitCollection
,与tvOS和macOS相同。
switch traitCollection.userInterfaceStyle {
case .light: //light mode
case .dark: //dark mode
case .unspecified: //the user interface style is not specified
}
您应该使用/ 的traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?)
功能来检测界面环境的变化(包括用户界面样式的变化)。UIView
UIViewController
从Apple开发人员文档中:
当iOS界面环境更改时,系统会调用此方法。根据您的应用程序的需求,在视图控制器和视图中实现此方法以响应此类更改。例如,当iPhone从纵向旋转为横向时,您可以调整视图控制器的子视图的布局。此方法的默认实现为空。
系统默认的UI元素(例如UITabBar
或UISearchBar
)会自动适应新的用户界面样式。
这将为您提供当前视图的用户界面样式。如果您已针对特定视图覆盖了它,它将不会告诉您系统的样式。
2> Ely..:
如daveextreme所提到的,使用属性时,检查当前视图用户界面样式并不总是返回系统样式overrideUserInterfaceStyle
。在这种情况下,最好使用以下代码:
switch UIScreen.main.traitCollection.userInterfaceStyle {
case .light: //light mode
case .dark: //dark mode
case .unspecified: //the user interface style is not specified
}
3> huync..:
对于iOS 13,您可以使用此属性来检查当前样式是否为暗模式:
if #available(iOS 13.0, *) {
if UITraitCollection.current.userInterfaceStyle == .dark {
print("Dark mode")
}
else {
print("Light mode")
}
}
4> 小智..:
在Objective-C中,您想要执行以下操作:
if( self.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ){
//is dark
}else{
//is light
}