起因
項(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ù)