UICollectionView received layout attributes for a cell with an index path that does not exist

我們的項(xiàng)目中有一個(gè)相對(duì)復(fù)雜的頁(yè)面,如下圖


IMG_0001.PNG

我的處理方式是將整個(gè)下部寫成一個(gè)UICollectionView,“單選題 本大題共。。?!焙汀八惴ǖ摹??!弊鳛閏ell,其他元素作為header和footer。由于下方淡藍(lán)色的cell寬度是自適應(yīng)的,邏輯是cell的寬度根據(jù)cell的內(nèi)容來(lái)自適應(yīng),并且不能超過(guò)一定數(shù)值,否則lable添加“...”。
這個(gè)需求很快就想到了使用Autolayout的自適應(yīng)Cell,我們只要設(shè)定好cell的約束,其他的布局就交給Autolayout來(lái)做。

let flowLayout = UICollectionViewLeftAlignedLayout()
flowLayout.estimatedItemSize = CGSize(width: 125, height: 40)
self.collectionView.collectionViewLayout = flowLayout

這個(gè)頁(yè)面上面有左右切換按鈕,點(diǎn)擊之后會(huì)刷新UICollectionView的數(shù)據(jù)。進(jìn)入頁(yè)面沒(méi)有問(wèn)題,但是切換數(shù)據(jù),調(diào)用ReloaData()方法就會(huì)崩潰,崩潰信息為:
UICollectionView received layout attributes for a cell with an index path that does not exist
找了很久,沒(méi)有找到解決的辦法,但大概的原因可能是:
使用了Autolayout自適應(yīng)Cell后,UICollectionView會(huì)自動(dòng)生成相應(yīng)cell的size,并緩存起來(lái)(重點(diǎn))。當(dāng)我們獲取了新的數(shù)據(jù)并ReloaData后,UICollectionView會(huì)嘗試去拿緩存起來(lái)的cell的size(目的是提高性能)。但是此時(shí)我們的數(shù)據(jù)源發(fā)生了改變,cell的個(gè)數(shù)也變了,因此出現(xiàn)了數(shù)組下標(biāo)越界,也就崩潰了。
正確的方法是:

self.collectionView.reloadData()
self.collectionView.collectionViewLayout.invalidateLayout()

刷新數(shù)據(jù)后清空collectionViewLayout的緩存,讓Autolayout重新計(jì)算UICollectionView的cell的size。這樣就沒(méi)有問(wèn)題了。

最后編輯于
?著作權(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)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,177評(píng)論 4 61
  • 其中隨開(kāi)機(jī)啟動(dòng)的設(shè)置很實(shí)用 如果選擇遠(yuǎn)程配置 就不要做二次加工的事情。
    黑澀布朗尼閱讀 182評(píng)論 0 0
  • 823fdd1d51c4閱讀 95評(píng)論 0 1
  • 攝影 楊澤平 背景是迎風(fēng)飄揚(yáng)的五星紅旗,主角是一只動(dòng)作夸張的小麻雀,它張大嘴,俯下身子,像是歌星正在深情歌唱。讓攝...
    窗外白楊閱讀 373評(píng)論 5 5
  • 與對(duì)企業(yè)自身有利的成員利益合作經(jīng)營(yíng)是一種應(yīng)對(duì)挑戰(zhàn)和尋求突破性發(fā)展的解決方式和戰(zhàn)略。一個(gè)企業(yè)不可能為所有人提供全部產(chǎn)...
    HR馬閱讀 496評(píng)論 0 0

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