iOS13暗黑模式的适配

苹果在iOS13推出了一种暗黑模式:可以在系统设置中,把iPhone手机展示模式变成暗黑风格;
暗黑模式是相对正常模式来说的,iOS13之前的iPhone手机模式都是正常模式.

暗黑模式的适配主要是在2个方面:
颜色和图片;
在暗黑模式和正常模式下,可以动态展示不同颜色和风格的照片;

颜色的适配(Colors)

iOS13新加了一种形如:UIColor *systemRedColor的系统颜色;
但不是设置了systemColor所有颜色在正常模式和暗黑模式都有2种颜色; 如红色,在两种模式下依然会是红色.

代码自定义动态颜色
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//方法1:类方法
UIColor *newColor1 = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) {//判断当前模式
return [UIColor whiteColor];
}
return [UIColor blackColor];
}];
//方法2:实例方法
UIColor *color2 = [[UIColor alloc]initWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) {//判断当前模式
return [UIColor whiteColor];
}
return [UIColor blackColor];
}];
Assets.xcassets添加自定义动态颜色

添加颜色
image
支持暗黑模式和正常模式:最右边选择Any,Dark.
颜色命名为color1,
正常模式下会读取左边的颜色,暗黑模式下会读取右边的颜色.
image

1
2
//在Assets.xcassets中和图片一样添加color,可以根据以下方法读取自定义的颜色
[UIColor colorNamed:@"color1"];

图片的适配

Assets.xcassets添加图片

在最右边选择Any,Dark
会出现如下图,把对应的图片拉进去即可:
image

把图片放进xcode工程适配

正常模式和暗黑模式的图片命名分开,然后判断当前app的是否是暗黑模式,来读取不同的图片资源.

1
2
3
4
5
UITraitCollection *traitCollection = [[UITraitCollection alloc]init];
if (traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight) {
//判断当前模式
UIImage *im = [UIImage imageNamed:@"xxx.png"];
}

苹果API自定义的动态颜色

1
2
3
4
5
6
7
//设置这种动态颜色,不会造成有正常模式转成暗黑模式时,会出现看不见的情况
UIColor *labelColor;//字体颜色(正常模式如果是黑色,那么暗黑模式下会自动转换成白色)
UIColor *placeholderTextColor;
UIColor *separatorColor;
UIColor *systemBackgroundColor;//背景在正常模式下默认是白色,暗黑则变成黑色.
、、、、
、、、、