参见:https://www.jianshu.com/p/24bbeac0dfec
https://www.jianshu.com/p/b73044d42e59
ios13新增的夜间模式/深色模式和浅色模式可以在【设置】-【显示与亮度】-【外观区域】中选择。
关于开发中的常见问题,做如下说明:(不足之处,欢迎指正)
【1】-在工程.plist文件里的一级结构里添加如下属性,该设置为全局设置,基本不会影响APP;参考枚举 UIUserInterfaceStyle ;
<key>UIUserInterfaceStyle</key>
<string>Light</string> // 浅色
<string>Dark</string> // 深色
【注意】在手机系统设置里设定为深色模式的时候,无法更改StateBar颜色
【2】-假如工程里含有自定义基类控制器BaseViewController,可在其内部做如下设置,类似全局设置;也可以的特定页面里单独设置;【2】不受【1】和用户设置的影响
if (@available(iOS 13.0, *)) {
self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark;
}
【3】-关于UIView、UIScrollView、UITableView、UITableViewCell、UICollectionView、UICollectionViewCell 等的背景色;UILabel等的字体颜色;在不设置的时候,会受深色和浅色的影响。当设定了特定的颜色或rgb等色值时,是不受影响的;
【4】-特定需要,根据用户的选择,在深色和浅色的变化,动态改变控件背景、字体等颜色;
if (@available(iOS 13.0, *)) {
_tableView.backgroundColor = [UIColor colorWithDynamicProvider:^UIColor * _Nonnull(UITraitCollection * _Nonnull traitCollection) {
if ( traitCollection.userInterfaceStyle == UIUserInterfaceStyleLight ) {
return [UIColor redColor];
}
else if ( traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark ) {
return [UIColor blueColor];
}
else {
return [UIColor yellowColor];
}
}];
} else {
// Fallback on earlier versions
}
【注意】这种类似监听的方式设定的color,首先受【2】,然后【1】的影响,如果没有设置【1】和【2】,受用户设置的影响。
ios13 新添加的类方法和对象方法:
- (UIColor *)colorWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
- (UIColor *)initWithDynamicProvider:(UIColor * (^)(UITraitCollection *traitCollection))dynamicProvider API_AVAILABLE(ios(13.0), tvos(13.0)) API_UNAVAILABLE(watchos);
【5】-枚举UIModalPresentationStyle新增属性
UIModalPresentationAutomatic
MySettingVC *vc = [MySettingVC new];
vc.modalTransitionStyle = UIModalTransitionStylePartialCurl;
vc.modalPresentationStyle = UIModalPresentationAutomatic;
[self presentViewController:vc animated:YES completion:nil];
参见:https://www.jianshu.com/p/24bbeac0dfec
https://www.jianshu.com/p/b73044d42e59