iOS14适配

UIDatePicker 样式默认改变
xcode12 UIDatePicker 需要加入 preferredDatePickerStyle ,并且DatePickerMode必须在UIDatePicker的frame赋值前赋值

//用先前滚动的样式,然后设置frame if (@available(iOS 13.4, *)) { [_datePicker setPreferredDatePickerStyle:UIDatePickerStyleWheels]; } else { } _datePicker.frame = CGRectMake(0, kTopViewHeight + 0.5, SCREEN_WIDTH, kDatePicHeight);

UITableViewCell(解决:[self addSubview:] 改[self.contentView addSubview:])
在 iOS14 中,UITableViewCell 中如果有直接添加在 cell 上的控件,也就是使用 [self addSubview:] 方式添加的控件,会显示在 contentView 的下层。
contentView 会阻挡事件交互,使所有事件都响应 tableView:didSelectRowAtIndexPath: 方法,如果 customView 存在交互事件将无法响应。如果 contentView 设置了背景色,还会影响界面显示。
相册相关
1、iOS14 新增了“Limited Photo Library Access” 模式,在授权弹窗中增加了 Select Photo 选项。用户可以在 App 请求调用相册时选择部分照片让 App 读取。从 App 的视?来看,你的相册里就只有这几张照片,App 无法得知其它照片的存在。
需要在 Info.plist 中设置 “PHPhotoLibraryPreventAutomaticLimitedAccessAlert”的值为 YES 来阻止该弹窗反复弹出,并且可通过下面这个 API 来主动控制何时弹出PHPickerViewController 进行照片选择。
[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];
2、 在 iOS14 中官方推荐使用 PHPicker 来替代原 API 进行图片选择。PHPicker 为独立进程,会在视图最顶层进行展示,应用内无法对其进行截图也无法直接访问到其内的数据。
需要 由 UIImagePickerController 替换到 PHPickerViewController, UIImagePickerViewController 功能受限,每次只能选择一张图片,将逐渐被废弃。?? PHPicker 支持多选,支持搜索,支持按 image,video,livePhotos 等进行选择。
注意点:在 limit Photo 模式下,AssetsLibrary 访问相册会失败;在 writeOnly 模式下,AssetLibrary 也会有显示问题。建议还在使用 AssetsLibrary 的同学尽快迁移到新 API。
授权相关:旧 API 废弃,增加 PHAccessLevel 参数。如果再使用以前的API来获取权限状态,PHAuthorizationStatusLimited 状态下也会返回 PHAuthorizationStatusAuthorized
[YYImage] iOS 14 YYAnimatedImageView 无法显示正常图片 ([YBImageBrowser]框架有引用,可解决)
没改源码,以防更新,用类别hook了那个方法:displayLayer:
// //YYAnimatedImageView+swizzling.h //MBALib // //Created by 1 on 2020/9/25. //Copyright ? 2020. All rights reserved. //修复yyimage iOS14出现了bug#import "YYAnimatedImageView.h"NS_ASSUME_NONNULL_BEGIN@interface YYAnimatedImageView (swizzling)@endNS_ASSUME_NONNULL_END

// //YYAnimatedImageView+swizzling.m //MBALib // //Created by 1 on 2020/9/25. //Copyright ? 2020. All rights reserved. //#import "YYAnimatedImageView+swizzling.h" #import @implementation YYAnimatedImageView (swizzling) + (void)load { Method a = class_getInstanceMethod(self, @selector(displayLayer:)); Method b = class_getInstanceMethod(self, @selector(swizzing_displayLayer:)); method_exchangeImplementations(a, b); }- (void)swizzing_displayLayer:(CALayer *)layer { //通过变量名称获取类中的实例成员变量 Ivar ivar = class_getInstanceVariable(self.class, "_curFrame"); UIImage *_curFrame = object_getIvar(self, ivar); if (_curFrame) { layer.contents = (__bridge id)_curFrame.CGImage; } else { if (@available(iOS 14.0, *)) { [super displayLayer:layer]; } } } @end

【iOS14适配】有其他问题,可点下面继续参考:
参考:https://www.cnblogs.com/fakeCoder/p/13722967.html
https://github.com/ibireme/YYImage/issues/149
https://www.jianshu.com/p/bf1c4ad44f5e?utm_campaign=hugo

    推荐阅读