UICollectionView使用小結(jié)

UICollectionViewFlowLayout類是一個(gè)具體的布局對(duì)象娱颊,它將一個(gè)個(gè)部件組織成一個(gè)可分組的(每個(gè)分組都有可選的頁眉和頁腳視圖)網(wǎng)格铆农;這些部件在集合視圖中從一行流向下一行或者一列流向下一列(根據(jù)滾動(dòng)方向),每個(gè)單元都可以是相同的尺寸或者不同的尺寸;

一個(gè)流布局是通過集合視圖的委托來決定每個(gè)分組的部件酪呻,頭部以及底部的尺寸大小的,這個(gè)委托對(duì)象必須執(zhí)行UICollectionViewDelegateFlowLayout協(xié)議盐须,通過這個(gè)協(xié)議可以讓你動(dòng)態(tài)的適應(yīng)布局信息玩荠,如果你沒有提供一個(gè)委托對(duì)象,那流布局將會(huì)使用你所設(shè)置的本類的以下屬性的默認(rèn)值贼邓。

流布局在一個(gè)方向上是用一個(gè)固定的距離來布局他們的內(nèi)容視圖阶冈,而在其他方向上是一個(gè)可滾動(dòng)的距離,例如塑径,在一個(gè)垂直滾動(dòng)網(wǎng)格女坑,當(dāng)內(nèi)容視圖的高度動(dòng)態(tài)適應(yīng)網(wǎng)格中的分組和單元格的數(shù)目 網(wǎng)格的內(nèi)容視圖的寬度將被約束到相應(yīng)的集合視圖的寬度。布局配置為默認(rèn)垂直滾動(dòng)统舀,你也可以使用scrolldirection屬性來配置的滾動(dòng)方向匆骗。

流布局的每一個(gè)分組都有它自己的頭部和底部,如果你想獲取頭部和底部視圖誉简,你必須配置頭部和底部的尺寸為非零值碉就,你可以通過實(shí)現(xiàn)相應(yīng)地委托方法來配置,或者你也可以通過設(shè)置相應(yīng)地屬性值來配置(headerReferenceSize 和 footerReferenceSize)闷串,如果尺寸為0瓮钥,那么相應(yīng)的頭部和底部視圖將不會(huì)被添加到集合視圖中去。

//列間距

@property (nonatomic) CGFloat minimumLineSpacing;

// 行間距

@property (nonatomic) CGFloat minimumInteritemSpacing;

//cell尺寸

@property (nonatomic) CGSize itemSize;

//預(yù)計(jì)cell尺寸

@property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0); // defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -perferredLayoutAttributesFittingAttributes:

//滾動(dòng)方向(水平或者垂直)

@property (nonatomic) UICollectionViewScrollDirection scrollDirection; // default is UICollectionViewScrollDirectionVertical

//頭部尺寸

@property (nonatomic) CGSize headerReferenceSize;

//底部尺寸

@property (nonatomic) CGSize footerReferenceSize;

//組的邊緣尺寸

@property (nonatomic) UIEdgeInsets sectionInset;

UICollectionViewDelegateFlowLayout協(xié)議

//每個(gè)cell的尺寸

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

//每個(gè)分組的邊緣尺寸

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;

/每個(gè)分組的/列間距

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;

//每個(gè)分組的行間距

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;

//每個(gè)分組的頭部尺寸

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;

//每個(gè)分組的底部尺寸

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;

創(chuàng)建UICollectionView烹吵,通過- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout;方法來創(chuàng)建集合視圖碉熄,layout不能為空;

UICollectionViewFlowLayout*flowLayout?=?[[UICollectionViewFlowLayoutalloc]init];

flowLayout.scrollDirection=?UICollectionViewScrollDirectionVertical;

//??????設(shè)置headview

flowLayout.headerReferenceSize=?CGSizeMake(self.frame.size.width,30);

CGRect?rect?=self.bounds;

rect.origin.x=?rect.size.width*?count;

UICollectionView*collectionView?=?[[UICollectionViewalloc]initWithFrame:rectcollectionViewLayout:flowLayout];

collectionView.backgroundColor=?[UIColorwhiteColor];

[collectionViewregisterClass:[LaunchCollectionViewCellclass]forCellWithReuseIdentifier:CellIdentifier];

//??????設(shè)置headview

[collectionViewregisterClass:[UICollectionReusableViewclass]forSupplementaryViewOfKind:UICollectionElementKindSectionHeaderwithReuseIdentifier:@"ReusableView"];

collectionView.showsHorizontalScrollIndicator=NO;

collectionView.showsVerticalScrollIndicator=NO;

collectionView.pagingEnabled=NO;

collectionView.scrollEnabled=NO;

collectionView.dataSource=self;

collectionView.delegate=self;

[scrollViewaddSubview:collectionView];

和UITableView類似年叮,實(shí)現(xiàn)兩個(gè)協(xié)議UICollectionViewDelegate和UICollectionViewDataSource

UICollectionViewDataSource

//每組的單元格數(shù)量

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section;

//創(chuàng)建單元格視圖具被,

//這里的cell必須通過 -dequeueReusableCellWithReuseIdentifier:forIndexPath:方法來檢索可重用的單元格,且可重用標(biāo)示符必須和創(chuàng)建UICollectionView時(shí)通過- registerClass:forCellWithReuseIdentifier:或者registerNib: forCellWithReuseIdentifier:方法注冊(cè)的標(biāo)示符要一致

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

//分組數(shù)

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView;

//創(chuàng)建頭部或者底部視圖

// 這里的視圖必須通過 -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:方法來檢索可重用的視圖只损,且可重用標(biāo)示符必須和創(chuàng)建UICollectionView時(shí)通過registerClass: forSupplementaryViewOfKind:withReuseIdentifier:或者registerNib: forSupplementaryViewOfKind: withReuseIdentifier:方法注冊(cè)的標(biāo)示符要一致

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath;

UICollectionViewDelegate

- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath;

- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath;

- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath;

- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath; // called when the user taps on an already-selected item in multi-select mode

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath;

- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath;

- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

- (void)collectionView:(UICollectionView *)collectionView willDisplaySupplementaryView:(UICollectionReusableView *)view forElementKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0);

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath;

- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath;

// These methods provide support for copy/paste actions on cells.

// All three should be implemented if any are.

- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath;

- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender;

- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender;

// support for custom transition layout

- (UICollectionViewTransitionLayout *)collectionView:(UICollectionView *)collectionView transitionLayoutForOldLayout:(UICollectionViewLayout *)fromLayout newLayout:(UICollectionViewLayout *)toLayout;

此外UICollectionView還能通過以下方法實(shí)現(xiàn)簡(jiǎn)單的修改

//滾動(dòng)到某分組的某單元

- (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated;

// These methods allow dynamic modification of the current set of items in the collection view

//插入某些組

- (void)insertSections:(NSIndexSet *)sections;

//刪除某些組

- (void)deleteSections:(NSIndexSet *)sections;

//重新加載某些組

- (void)reloadSections:(NSIndexSet *)sections;

//移動(dòng)組

- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection;

//添加一些單元格

- (void)insertItemsAtIndexPaths:(NSArray *)indexPaths;

//刪除一些單元格

- (void)deleteItemsAtIndexPaths:(NSArray *)indexPaths;

//創(chuàng)新加載一些單元格

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths;

//移動(dòng)單元格

- (void)moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跃惫,更是在濱河造成了極大的恐慌叮叹,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爆存,死亡現(xiàn)場(chǎng)離奇詭異蛉顽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)先较,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門携冤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闲勺,你說我怎么就攤上這事曾棕。” “怎么了菜循?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵翘地,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我癌幕,道長(zhǎng)衙耕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任勺远,我火速辦了婚禮橙喘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胶逢。我一直安慰自己渴杆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布宪塔。 她就那樣靜靜地躺著磁奖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪某筐。 梳的紋絲不亂的頭發(fā)上比搭,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音南誊,去河邊找鬼身诺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抄囚,可吹牛的內(nèi)容都是我干的霉赡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼幔托,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼穴亏!你這毒婦竟也來了蜂挪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤嗓化,失蹤者是張志新(化名)和其女友劉穎棠涮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刺覆,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡严肪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谦屑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驳糯。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氢橙,靈堂內(nèi)的尸體忽然破棺而出酝枢,到底是詐尸還是另有隱情,我是刑警寧澤充蓝,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布隧枫,位于F島的核電站,受9級(jí)特大地震影響谓苟,放射性物質(zhì)發(fā)生泄漏官脓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一涝焙、第九天 我趴在偏房一處隱蔽的房頂上張望卑笨。 院中可真熱鬧,春花似錦仑撞、人聲如沸赤兴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桶良。三九已至,卻和暖如春沮翔,著一層夾襖步出監(jiān)牢的瞬間陨帆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工采蚀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疲牵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓榆鼠,卻偏偏與公主長(zhǎng)得像纲爸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妆够,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容