UICollectionView使用

先上圖再解釋!

70D72950-B109-4362-8B3E-E2C628E019AB.png

公司要求做一個(gè)這樣的一個(gè)頁面,剛接到這個(gè)需求,還容易就想到tableView 嵌套 collectionView。

下面一步一步說明實(shí)現(xiàn)的邏輯,首先肯定創(chuàng)建tableview,實(shí)現(xiàn)數(shù)據(jù)源方法,在自定義tableviewCell ,在上面添加collectionView ,這是一個(gè)很重要的點(diǎn)需要注意,tableviewcell 可以重用也可以不重用,可以給每個(gè)cell設(shè)置不同的重用標(biāo)識(shí)符,但是collectionViewCell 必須重用,也就是說tableviewCell上面創(chuàng)建了多個(gè)collectionview,多個(gè)collectionview可以重用同一個(gè)一個(gè)collectionviewcell 。

在創(chuàng)建tableviewcell的時(shí)候內(nèi)部創(chuàng)建collectionview,這個(gè)collectionview最好是懶加載的,因?yàn)閏ell的數(shù)據(jù)源方法會(huì)調(diào)用多次,也就會(huì)多次創(chuàng)建collectionview,懶加載保證cell沒有創(chuàng)建新的內(nèi)部的子控件collectionview 也不會(huì)創(chuàng)建多個(gè),在懶加載的時(shí)候設(shè)置好數(shù)據(jù)源和代理和布局屬性,我們這是要給cell設(shè)置不同的數(shù)據(jù)源(dataArray),cell的setDataArray的時(shí)候刷新內(nèi)部的collectionvView

其中還有一個(gè)UI的問題,就是每行cell距離左邊的距離和右邊的距離還有中間的距離一致,之前想給collectionView 的大小改變一下,不過這樣設(shè)置背景顏色的時(shí)候會(huì)有一些奇怪,具體的看你的項(xiàng)目,如果可以也可以這么設(shè)置,我現(xiàn)在用到的是flowLayOut的一個(gè)屬性sectionInset屬性,設(shè)置組內(nèi)的偏移量(flowlayout.sectionInset = UIEdgeInsetsMake(0, margin, 0, margin);),讓左邊和右邊都留出來一個(gè)間距margin,在設(shè)置flowLayOut 的minimumInteritemSpacingcell間距為margin,這樣在計(jì)算cell的大小為(屏幕的寬度 - 3*margin )/ 2 ,這就是每個(gè)cell的寬度,通過寬高比計(jì)算出高度

這樣基本就能顯示出來cell了,那么問題又來了,UI上面要加一條橫線,我們都知道collectionviewcell 是哪一個(gè)小塊,不想tableviewcell可以在底部加橫線,在考慮再三我選擇那個(gè)橫線用一個(gè)cell去做,也就是說兩個(gè)正常的cell中間返回一個(gè)橫線cell,這就要我們改掉數(shù)據(jù)源方法,需要計(jì)算出我們需要加多少個(gè)橫線cell,在加上普通的cell,一共才是總共的cell個(gè)數(shù),還有就是cell的大小不一樣了,正常的cell的大小還需要那么計(jì)算,但是線的cell的大小就變了,我們只需要遵循UICollectionViewDelegateFlowLayout這個(gè)代理,并實(shí)現(xiàn)代理方法-(CGSize)collectionView: layout: sizeForItemAtIndexPath: 判斷位置返回對(duì)應(yīng)大小的cell,代碼如下

8DB2FEFB-322E-4706-BC7B-11E5A3F60F49.png

數(shù)據(jù)源具體代碼:


065B6BEC-7AF7-4375-8307-A445100E6320.png
4069779E-D85D-476A-83B0-E7A8562DBD35.png
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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