UITableViewCell中嵌套UICollectionView

前序


之前公司給我分配了一個任務(wù),作為我實習(xí)期的一個考核。這個任務(wù)主要是使用RAC+MVVM去編寫的,其中有一個核心界面算是比較的復(fù)雜吧。這個界面其實就是一個UITableView,當(dāng)中有一個cell中包含了UICollectionView來顯示城市列表。因為每個城市的名字長度不一樣,所以也會涉及到UICollectionViewCell的布局問題。

核心界面的展示


核心界面


難點


我們可以看到DAY1這個cell中包括一個UICollectionView來展示城市列表。這里的話有兩個地方需要注意一下:1.因為城市的字數(shù)有的長有的短,所有UICollectionViewCell的長度是不確定的,這樣導(dǎo)致UICollectionViewCell的布局并不是像現(xiàn)在這樣都是左對齊的,cell之間的間距并不是固定的。 ? ? ? ? ?2.cell的高度要根據(jù)UICollectionView展示內(nèi)容的高度變化而變化,確保能夠完全展示所有的城市列表(意思就是不用去滑動UICollectionView來查看城市列表)

對于第一個問題:在上面的布局中我們發(fā)現(xiàn)每兩個UICollectionViewCell之間的間隔是相等的,如果我們使用系統(tǒng)自動幫我們布局的話,cell之間的間隔將會不一樣。我們在SB中只能設(shè)置最小行間距和最小列間距,并不能設(shè)置固定間距。所以為了到達上面的效果,我們需要重寫UICollectionViewDelegateFlowLayout中的四個方法。? ?

?解決方法:1.先創(chuàng)建一個類(繼承UICollectionViewDelegateFlowLayout),重寫這四個方法。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ?2.設(shè)置UICollectionView的collectionViewLayout屬性值為我們剛剛創(chuàng)建的類。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


重寫四個方法

最主要的還是prepareLayout方法,在這個方法體中我們要自己計算每個cell的位置,保證每兩個cell之間的間距一定。


對于第二個問題:剛開始我想使用網(wǎng)上動態(tài)改變cell高度的三方庫(優(yōu)化UITableViewCell高度計算的那些事)去做的,但是這個三方庫在這里是無法使用的。因為UICollectionView本身就繼承UIScrollView,我們這里能夠改變的只是UICollectionView中cell的個數(shù),并不能改變UICollectionView的高度,因此也就無法用三方庫的方法去改變UITableViewCell的高度。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?解決方法:根據(jù)城市列表的數(shù)據(jù)源,計算出UICollectionView所需要的顯示高度,然后在heightForRowAtIndexPath方法中將計算出的高度賦值給對于的cell。計算高度的方法和上面計算每個UICollectionViewCell位置的方法思路是差不多的。

結(jié)束語


這篇文章可以說的還不是太詳細,解決方案也許也不是最好的。如果你有什么不理解的地方或者有更好的解決方法,歡迎留言交流。Github地址,算高方法 主要是Utils.m文件中changeCollectionViewHeight方法。

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

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

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