電腦升級Big Sur beta,Xcode12,手機升級iOS 14,開開心心的開發(fā)項目。雖然不需要太多適配,但還是出現了一些小問題,下面匯總下問題以及解決方案(以后還是等出.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閃退,必現的,但不影響解除設備。
后續(xù)遇到問題會持續(xù)更新,希望能幫到大家!