iOS UICollectionView的常用回调方法详细解释
//collectionView有多少个分组section
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return3;
}
//每个section里面有多少个cell
//不判断section,就是每个section返回的cell个数一样
- (NSInteger)collectionView:(UICollectionView*)collectionViewnumberOfItemsInSection:(NSInteger)section {
return5;
}
/返回具体某一个section里面的某一个item对应的cell
//不判断indexPath,就是返回相同的cell
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class]) forIndexPath:indexPath];
if(indexPath.section==0) {
cell.backgroundColor = [UIColor redColor];
}elseif(indexPath.section==1) {
cell.backgroundColor = [UIColor grayColor];
}else{
cell.backgroundColor = [UIColor yellowColor];
}
returncell;
}
//返回具体某一个section里面的某一个item对应的cell的size
//不判断indexPath,就是每个cell的大小一样
- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutsizeForItemAtIndexPath:(NSIndexPath*)indexPath {
if(indexPath.section==0) {
return CGSizeMake((self.view.bounds.size.width - 80)/3, 100);
}elseif(indexPath.section==1) {
return CGSizeMake((self.view.bounds.size.width - 20)/3, 100);
}else{
return CGSizeMake((self.view.bounds.size.width - 150)/3, 100);
}
}
//代表某一个section里面,各个cell之间上下之间的间距
//不判断section,就是每个section里面各个cell之间上下之间的间距(补充:如果UICollectionView水平滚动,minimumLineSpacing 代表的就是每个section里面各个cell之间左右之间的间距一样)
- (CGFloat)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutminimumLineSpacingForSectionAtIndex:(NSInteger)section {
if(section ==0) {
return10;
}elseif(section ==1) {
return20;
}else{
return80;
}
// return 50;
//代表某一个section里面,各个cell之间左右之间的间距(cell宽度的计算,是跟这个间距有关的,不然会出现显示不正常问题)(补充:如果UICollectionView水平滚动,minimumInteritemSpacing ,代表的就是每个section里面各个cell之间上下之间的间距)
//不判断section,就是每个section里面各个cell之间左右之间的间距一样
- (CGFloat)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutminimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
if(section ==0) {
return0;
}elseif(section ==1) {
return10;
}else{
return50;
}
// return 50;
}
//某一个section距离屏幕左右两侧的间距,以及距离自身(section)的头部试图(Header)、尾部试图(Footer)的间距
//return UIEdgeInsetsMake(该section距离头部试图的间距, 该section距离collectionView左边的间距, 该section距离尾部试图的间距, 该section距离collectionView右边的间距);
//不判断section就是每个section的UIEdgeInsetsMake一样
//这里可以把section看成是一个view。view里面放了很多cell (如图--01所示)
补充:要是collectionView是横向滚动,return UIEdgeInsetsMake(该section距离collectionView顶部的间距, 该section距离头部试图的间距, 该section距离collectionView底部的间距, 该section距离尾部试图的间距) 也就是说collectionView横向滚动的时候,可以把手机横(旋转90度)着看竖直滚动的collectionView,
补充:当scrollDirection是UICollectionViewScrollDirectionHorizontal,也就是水平滚动UICollectionView的时候,minimumLineSpacing 此时代表的是cell左右的间距。其实很好理解,UICollectionView水平滚动的时候,相当于UICollectionView垂直滚动时,把手机横屏来滚动
图--01- (UIEdgeInsets)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutinsetForSectionAtIndex:(NSInteger)section {
if(section ==0) {
returnUIEdgeInsetsMake(0,20,0,20);
}elseif(section ==1) {
returnUIEdgeInsetsMake(10,0,10,0);
}else{
returnUIEdgeInsetsMake(5,0,5,0);
}
}
//返回某一个indexPath对应的头部试图or尾部试图(不判断indexPath,就是每个section的头部试图返回一样的)
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath];
headerView.backgroundColor= [UIColorgreenColor];
returnheaderView;
}
if ([kind isEqualToString:UICollectionElementKindSectionFooter]) {
UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:NSStringFromClass([UICollectionReusableView class]) forIndexPath:indexPath];
headerView.backgroundColor = [UIColor orangeColor];
returnheaderView;
}
return nil;
}
//返回某一个indexPath对应的头部试图的size(不判断section,就是每个section的头部试图大小一致)
- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutreferenceSizeForHeaderInSection:(NSInteger)section {
return CGSizeMake(self.view.bounds.size.width, 20);
}
//返回某一个indexPath对应的尾部试图的size(不判断section,就是每个section的尾部试图大小一致)
- (CGSize)collectionView:(UICollectionView*)collectionViewlayout:(UICollectionViewLayout*)collectionViewLayoutreferenceSizeForFooterInSection:(NSInteger)section {
return CGSizeMake(self.view.bounds.size.width, 20);
}