iOS14 适配 + Xcode12 + Big Sur(持续更新)

电脑升级Big Sur beta,Xcode12,手机升级iOS 14,开开心心的开发项目。虽然不需要太多适配,但还是出现了一些小问题,下面汇总下问题以及解决方案(以后还是等出.1版本再更新吧。(* ̄rǒ ̄))

问题一:Cell中子视图不能点击或者滑动等手势响应问题

原因:子视图被遮挡在UITableViewCellContentView下面。项目中部分旧代码会将控件添加在Cell中,而不是xxxCell.contentView,所以需要改为contentView.addsubview(xxx)。由于改动代码量大并且自定义视图中也可以调用addsubview(Swift)和self addsubView:(OC),所以要全局替换并且过滤自定义视图。

解决方法:

1、正则是个好东西。通过自定义筛选作用域,筛选File Name含有Cell文件。

切记:全局替换前要Commit!全局替换前要Commit!全局替换前要Commit!

image.png

点击Workspace->Edit->在Text中填写“Cell”,光标选中①,按Enter搜索查看筛选结果,点击Replace All即可(Swift填写.addSubview并将Replace》Text》的Containing替换为Starting With)。

2、通过Runtime拦截更改方法

extension UITableViewCell {
    
    class func replaceCellContentView() {
        
        let sel1 = #selector(UITableViewCell.rt_addSubview(_:))
        let sel2 = #selector(UITableViewCell.addSubview(_:))
        
        let method1 = class_getInstanceMethod(UITableViewCell.self, sel1)!
        let method2 = class_getInstanceMethod(UITableViewCell.self, sel2)!
        
        let isSuccess: Bool = class_addMethod(self, sel2, method_getImplementation(method1), method_getTypeEncoding(method1))
        if isSuccess {
            class_replaceMethod(self, sel1, method_getImplementation(method2), method_getTypeEncoding(method2))
        } else {
            method_exchangeImplementations(method2, method1)
        }
    }
    
    @objc func rt_addSubview(_ view: UIView) {
        
        if view.isKind(of: NSClassFromString("UITableViewCellContentView")!) {
            runtime_addSubview(view)
        } else {
            self.contentView.addSubview(view)
        }
    }
}

推荐第一种方法,虽然个别文件还会报错,但手动调整也能很快解决。第二种方法可能会存在隐患。

问题二:启动时卡在启动页1-2分钟(已解决)

有小伙伴在10.15.6也出现这个问题,所以排除Big Sur。另外一个小伙伴通过手机回退13重刷14解决,有苦恼有备份手机的同学可试下这个方法。
回退教程

最终解决方法:stackoverflow方法

1、打开文件路径 ~/Library/Developer/Xcode/iOS DeviceSupport/,删除以14开头的文件夹
2、找到xcode已连接的设备,全部解除,unpair the device。然后重启Xcode,运行APP
PS:unpair the device时会造成Xcode12闪退,必现的,但不影响解除设备。

后续遇到问题会持续更新,希望能帮到大家!

你可能感兴趣的:(iOS14 适配 + Xcode12 + Big Sur(持续更新))