UICollectionView系統(tǒng)BUG記錄 -— reloadData后變空白,cellForItemAtIndexPath不執(zhí)行


起因

項(xiàng)目里在間隔很短時(shí)間內(nèi)去重復(fù)reloadData,出現(xiàn)UICollectionView在reloadData后變成空白,contentSize正常,頁(yè)面能夠正常滑動(dòng),但是所有的cell都不顯示,visiableCells屬性為空。調(diào)試發(fā)現(xiàn)唯獨(dú)cellForItemAtIndexPath這個(gè)回調(diào)方法不執(zhí)行。
ps: 也有人遇到說(shuō)界面上所有的cell的hidden屬性都變?yōu)閅ES了,其實(shí)所有滑出頁(yè)進(jìn)入復(fù)用池的cell都會(huì)被hidden。

調(diào)研:

通過(guò)對(duì)比發(fā)現(xiàn)collectionView變空白前后的屬性,發(fā)現(xiàn)_reloadingSuspendedCount這個(gè)私有屬性的值被置為-1。

變空白前后屬性對(duì)比.png

最終發(fā)現(xiàn)這個(gè)屬性為0時(shí),reloadData才會(huì)真正執(zhí)行的,它在insert、delete、move操作前會(huì)先被++,以保證在執(zhí)行相關(guān)動(dòng)效是不被reloadData打亂,執(zhí)行完畢后--。調(diào)試發(fā)現(xiàn)值會(huì)<0,特別是前一次reload未執(zhí)行完畢又reload一次。

解決方案

利用runtime將_resumeReloads屬性替換,發(fā)現(xiàn)_reloadingSuspendedCount < 0時(shí)及時(shí)糾正為0。
個(gè)人庫(kù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容