iOS14 適配 + Xcode12 + Big Sur(持續(xù)更新)

電腦升級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!

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閃退,必現的,但不影響解除設備。

后續(xù)遇到問題會持續(xù)更新,希望能幫到大家!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。