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;