iOS 13适配记录9.24

自己项目中适配记录

1、PresentViewCotroller

iOS13默认present方式为卡片形式,对于全局弹出的视图需要做model适配。

网上给出的方式为present的时候设置ctr.modalPresentationStyle = UIModalPresentationFullScreen;

对于我自己的项目研发中有挺多地方需要做调整,好在有做基类的习惯,所以在基类中做个简单调整就完成了模态视图弹出的适配。

稍微改变:

基类XXXBaseViewController.m中声明UINavigationControllerDelegate代理,并实现present代理方法:presentViewController:animated:completion,方法中声明model类型,如下

基类适配present

2、暗黑模式适配:

颜色适配

iOS13新增暗黑模式设置,如果项目中默认使用系统配置字体、背景色等,未做适配的情况下会跟着变更为暗黑色(因为13之前颜色是静态的,无相关颜色配置),如果项目需要做暗黑适配,可在Light Mode和Dark Mode可以分别设置不同的颜色。如:

self.view.backgroundColor = [UIColorsystemBackgroundColor;

self.titleLabel.textColor = [UIColorlabelColor];

self.detailLabel.textColor = [UIColorplaceholderTextColor];

当然iOS13系统对于UIColor肯定也是会提供对应主题的适配方法,进入UIColor的API中会发现新增了两个方法:

UIColor新增方法

根据traitCollection的不同UIUserInterfaceStyle状态做对应的色值设置。

图片适配

在Assets.xcassets或者自己的picture.xcassets中新建一个Image set,选择右侧栏中的appearance中选择Any dark,或其他类型,根据对应的模式将图片拖进去,图片使用方式不变。

模式获取与监听转换

获取当前的主题

可以使用UITraitCollection获取当前的主题状态:UITraitCollection.currentTraitCollection.userInterfaceStyle

监听模式切换

监听方法
iOS 13适配记录9.24_第1张图片
使用方式

设置app或者Controller仅兼容单一模式

第一种做法是在plist文件中设置User Interface Style为Light,或者Dark

第二种做法设置单独或者Window全局样式[self setOverrideUserInterfaceStyle:UIUserInterfaceStyleLight];

KVO

[xxx setValue:forKey:];仍可继续使用,但是对于key的子属性无法使用。比如

[textField setValue:UIColor.GrayColor forKey:@"_placeHolder.textColor"];(一般不使用此方法,多使用placeHolderAtrri属性),

iOS12上正常使用,iOS13调用此方法时会出现崩溃。

你可能感兴趣的:(iOS 13适配记录9.24)