在上一篇博客中《iOS開(kāi)發(fā)之UICollectionViewController系列(三) –使用UICollectionView自定義瀑布流》,自定義瀑布流的列數(shù),Cell的外邊距,Cell的最大以及最小高度是在我們的布局文件中是寫(xiě)死的,換句話說(shuō)也就是不可配置的。為了循序漸進(jìn),由淺入深呢,上篇博客暫且那么寫(xiě)。不過(guò)那樣寫(xiě)太過(guò)死板,本來(lái)使用起來(lái)比較靈活的自定義布局,如果把其配置參數(shù)給寫(xiě)死了,就相當(dāng)于在籠中的猛獸,再厲害不也白扯蠻。
在今天這篇博客中我們要接著上篇博客中的Demo,使其自定義布局的屬性在使用它的UICollectionView中是可配置的。 當(dāng)然在本篇要介紹的Demo中只提取了四個(gè)布局參數(shù),無(wú)論添加一個(gè)Delegate,但思路都是一樣的。我們把上一篇博客中寫(xiě)死的內(nèi)容,通過(guò)布局代理來(lái)提供參數(shù)配置,這樣就靈活多了。好了,咸淡扯的適中,進(jìn)入我們今天的主題。
一.進(jìn)化后的運(yùn)行效果
下圖算是Demo的2.0版本的運(yùn)行效果,和之前的比較起來(lái)功能確實(shí)強(qiáng)大了不少。因?yàn)樗强膳渲没?,根?jù)用戶輸入的參數(shù)來(lái)確定瀑布流的樣式。當(dāng)然Demo中是通過(guò)用戶輸入的參數(shù)來(lái)確定的,如果你在代碼中使用該自定義瀑布流,需要根據(jù)你的實(shí)際情況可以配置瀑布流的參數(shù),來(lái)打造屬于你自己的瀑布流。網(wǎng)上雖然好多實(shí)現(xiàn)瀑布流的博客和代碼,但是像今天這樣可配置的瀑布流應(yīng)該是不多的,至少我沒(méi)見(jiàn)過(guò),所以嘍就寫(xiě)一個(gè),開(kāi)源一下,給大家分享交流一下。

二、自定義瀑布流使用方式
該自定義瀑布流布局的使用方式和系統(tǒng)自帶的UICollectionViewDelegateFlowLayout用法一直,都是通過(guò)布局代理來(lái)定制布局參數(shù),關(guān)于UICollectionViewDelegateFlowLayout的內(nèi)容詳見(jiàn)《iOS開(kāi)發(fā)之窺探UICollectionViewController(二) –詳解CollectionView各種回調(diào)》中有關(guān)UICollectionViewDelegateFlowLayout代理介紹的內(nèi)容。
如果想使用該布局文件,你需要為我們的UICollectionView來(lái)指定該布局文件,在本篇博客中的Demo中是在Storyboard中進(jìn)行自定義布局文件的指定的,你也可以通過(guò)代碼的方式指定,再次不做過(guò)多的贅述。指定該自定義布局后,你需要做以下事情:
1.為布局指定代理方法
首先獲取UICollectionView的布局collectionViewLayout,然后為其設(shè)置CustomeCollectionViewLayoutDelegate代理即可,代碼如下:
Objective-C
_customeLayout = (CustomeCollectionViewLayout *) self.collectionViewLayout;
_customeLayout.layoutDelegate = self;
2.實(shí)現(xiàn)CustomeCollectionViewLayoutDelegate中的方法
需要在UICollectionView的使用控制器中實(shí)現(xiàn)自定義布局中的代理方法來(lái)設(shè)置布局屬性,我們這兒定了四個(gè)必須實(shí)現(xiàn)的方法。 你可以通過(guò)這些方法去設(shè)定cell的列數(shù),Cell的外邊距,Cell的最小高度,Cell的最大高度,如下所示:
Objective-C
#pragma mark
- (NSInteger) numberOfColumnWithCollectionView: (UICollectionView *)collectionView
collectionViewLayout:( CustomeCollectionViewLayout *)collectionViewLayout{
return _cellColumn;
}
- (CGFloat)marginOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{
return _cellMargin;
}
- (CGFloat)minHeightOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{
return _cellMinHeight;
}
- (CGFloat)maxHeightOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{
return _cellMaxHeight;
}
- 你就可以通過(guò)上述Delegate方法來(lái)修改自定義布局的屬性了,你可以通過(guò)一個(gè)配置頁(yè)面,進(jìn)行參數(shù)配置。配置完后,進(jìn)行CollectionView的刷新即可,這些在本博客中就不做贅述,詳情請(qǐng)見(jiàn)博客下方gitHub分享地址。
至此,我們的自定義瀑布流就相對(duì)比較完善了,不過(guò)還有好大的改善控件。感興趣的小伙伴可以在此基礎(chǔ)上加上你自己的東西。
Demo地址
如果您是iOS開(kāi)發(fā)者,或者對(duì)本篇文章感興趣,請(qǐng)關(guān)注本人,后續(xù)會(huì)更新更多相關(guān)文章!敬請(qǐng)期待!
參考文章:
iOS開(kāi)發(fā)之窺探UICollectionViewController(三) --使用UICollectionView自定義瀑布流