我最近安装了最新的Xcode 11.2.1,并将iPhone设备的iOS更新为13.2.3,针对模拟器的iOS更新为13.x。我正在尝试在我的应用程序中实现暗模式,但是我只能使它与Apple框架之类的东西一起使用,例如alertControllers
等,但不能与我自己的viewControllers
一起使用。
使用代码,我尝试使用此代码只是为了查看事情是否正常:
if #available(iOS 13, *) {
if traitCollection.userInterfaceStyle == .dark {
print("🇫🇯DARK MODE")
cell.backgroundColor = UIColor.black
}else {
print("🇫🇯LIGHT MODE")
cell.backgroundColor = UIColor.white
}
}
但是未正确触发。激活了暗模式时,它会记录“ LIGHT MODE”,但是如果激活了亮模式/正常模式,则不会相反。它仍然会触发“ LIGHT MODE”,但有时似乎是随机触发了“ DARK MODE”。
我也尝试过在system colors
文件上使用新的xib
,但是在不同模式之间切换不会改变任何内容。我尝试使用不同的颜色(例如橙色),只是看它是否显示,并且可以显示,但是在更改模式时不会切换。
最后,我尝试通过将自己的系统颜色添加到资产文件夹中,将外观设置为“任何,浅色,深色”,添加其他颜色,然后在xib
上使用该颜色,来添加自己的系统颜色。这给我一个错误:Named colors do not work prior to iOS 11.0
。但是就像我说的那样,我正在模拟器和设备上都使用iOS 13,所以不确定这是怎么回事。
仅作说明,我已经尝试在设备或模拟器的系统偏好设置以及新的environment override
按钮中切换模式。
完全不知道这是什么交易。似乎很简单,但根本无法正常工作。
这就是我为应用程序支持iOS 13暗模式和运行ios <11.0的设备所做的工作。假设您在深色和浅色模式下的资产中都有一种颜色,它称为“白色”]
if #available(iOS 11.0, *) {
cell.backgroundColor = UIColor(name: "White")
}else{
cell.backgroundColor = UIColor.white
}
对于IOS 11以下的设备,它位于else部分,您的单元格将为white
。对于运行11 <= ios <13的设备,它将选择UIColor(name: "White")
的亮模式。对于运行ios 13.0的设备,它也会选择UIColor(name: "White")
,但要根据资产中定义的颜色的亮/暗模式版本
以上提及错误:这给我一个错误:命名颜色在iOS 11.0之前不起作用。但是就像我说的那样,我正在模拟器和设备上都使用iOS 13,所以不确定这是怎么回事。
原因:
存在实际问题是您的iOS部署目标低于11.0,因此在11.0以下无法正常工作。
解决方案:
在上面的11.0中将您的部署目标更改为它并运行项目,一切正常。
希望它会起作用。