电脑升级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!
点击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闪退,必现的,但不影响解除设备。
后续遇到问题会持续更新,希望能帮到大家!