ios13适配不断更新

1.     暗黑模式

iOS13使用暗黑模式时,UIView默认背景色会变成暗黑色。适配暗黑模式的工作量较大,改为强制使用正常模式。

处理方案:在plist文件中增加配置项UIUserInterfaceStyle,值为Light。


2.    UITextField 的私有属性 _placeholderLabel 被禁止访问了

[self.textField setValue:self.placeholderColor forKeyPath:@"_placeholderLabel.textColor"];

居然崩溃了,错误信息如下

'Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug'

解决方案:

UITextField有个attributedPlaceholder的属性,我们可以自定义这个富文本来达到我们需要的结果。 

 NSMutableAttributedString *placeholderString = [[NSMutableAttributedString alloc] initWithString:_iphoneTextField.placeholder attributes:@{NSForegroundColorAttributeName : kTextColor}];

_iphoneTextField.attributedPlaceholder= placeholderString;

iOS 13 通过 KVC 方式修改私有属性,有 Crash 风险,谨慎使用!并不是所有KVC都会Crash,要尝试!

3. 使用 UISearchDisplayController 导致崩溃

在 iOS 8 之前,我们在 UITableView 上添加搜索框需要使用 UISearchBar + UISearchDisplayController 的组合方式,而在 iOS 8 之后,苹果就已经推出了 UISearchController 来代替这个组合方式。在 iOS 13 中,如果还继续使用 UISearchDisplayController 会直接导致崩溃


4.

控制器的 modalPresentationStyle 默认值变了

查阅了下 UIModalPresentationStyle枚举定义,赫然发现iOS 13新加了一个枚举值:typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {    UIModalPresentationFullScreen = 0,    UIModalPresentationPageSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),    UIModalPresentationFormSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),    UIModalPresentationCurrentContext API_AVAILABLE(ios(3.2)),    UIModalPresentationCustom API_AVAILABLE(ios(7.0)),    UIModalPresentationOverFullScreen API_AVAILABLE(ios(8.0)),    UIModalPresentationOverCurrentContext API_AVAILABLE(ios(8.0)),    UIModalPresentationPopover API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(tvos),    UIModalPresentationBlurOverFullScreen API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios) API_UNAVAILABLE(watchos),    UIModalPresentationNone API_AVAILABLE(ios(7.0)) = -1,    UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,};

解决方案

如果你完全接受苹果的这个默认效果,那就不需要去修改任何代码。

如果,你原来就比较细心,已经设置了modalPresentationStyle的值,那你也不会有这个影响。

对于想要找回原来默认交互的同学,直接设置如下即可:

在presentViewController之前加入这个代码

[self presentViewController:nav animated:YES completion:nil];

nav.modalPresentationStyle = UIModalPresentationFullScreen;

你可能感兴趣的:(ios13适配不断更新)