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)

@end

NS_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

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

你可能感兴趣的:(iOS14适配)