##DAY15——UICollectionView

DAY15——UICollectionView

创建UICollectionView

 //创建一个布局对象,采用系统布局类UICollectionViewFlowLayout
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    
    //设置滑动方向
    layout.scrollDirection = UICollectionViewScrollDirectionVertical;
    
    CGFloat totalWidth = self.view.frame.size.width;
    
    //设置最小的行间距
    layout.minimumLineSpacing = 20;
    
    //设置item与item之间的间距
    layout.minimumInteritemSpacing = 10;
    
    //设置集合视图的分区间隔(上、左、下、右)
    layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
    
    //设置每一个item的尺寸的大小
    layout.itemSize = CGSizeMake((totalWidth - 40) / 3, 80);
    
    //集合视图的创建必须指定布局,如果没有布局,显示不了任何东西
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:[[UIScreen mainScreen] bounds] collectionViewLayout:layout];
    
    //集合视图如果想要显示内容,必须将cell注册 MyCollectionViewCell
    [collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:kReuse];
    
    //头部引用的尺寸
    layout.headerReferenceSize = CGSizeMake(0, 50);
    
    //如果想要分区头视图显示,必须注册增广视图 MyCollectionReusableView
    [collectionView registerClass:[MyCollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
    
    //指定代理
    collectionView.dataSource = self;
    collectionView.delegate = self;
    
    [self.view addSubview:collectionView];

//返回增广视图,也就是头视图
collectionView:viewForSupplementaryElementOfKind:atIndexPath:
注意:
dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader

collectionView:cellForItemAtIndexPath:

#pragma mark -----UICollectionViewDelegateFlowLayout---------
collectionView:layout:sizeForItemAtIndexPath:
collectionView:layout:insetForSectionAtIndex:
collectionView:layout:minimumLineSpacingForSectionAtIndex:
collectionView:layout:minimumInteritemSpacingForSectionAtIndex:

自定义UICollectionViewLayout

#import "MyCollectionViewCell.h"

@implementation MyCollectionViewCell
- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        CGFloat totalWidth = frame.size.width;
        CGFloat totalHeight = frame.size.height;
        _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, totalWidth, totalHeight - 40)];
        [self.contentView addSubview:_imageView];
        _showLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, totalHeight - 40, totalWidth, 40)];
        _showLabel.textAlignment = NSTextAlignmentCenter;
    }
    return self;
}
@end


#import "UIImageView+WebCache.h"
#import "Model.h"
#import "MyCollectionViewCell.h"
#import "UIImageView+WebCache.h"


@implementation ViewController

- (void)handleJSon{
    //获取json数据的路径
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"json"];
    //获取NSData对象
    NSData *data = [NSData dataWithContentsOfFile:filePath];
    //解析json数据
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    _dataArr = [[NSMutableArray alloc] initWithCapacity:0];
    for (NSDictionary *dic in arr) {
        Model *model = [[Model alloc] init];
        [model setValuesForKeysWithDictionary:dic];
        [_dataArr addObject:model];
        [model release];
    }
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    MyCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"reuse" forIndexPath:indexPath];
    Model *model = _dataArr[indexPath .row];
    cell.showLabel.text = [NSString stringWithFormat:@"%ld, %ld",indexPath.section, indexPath.row];
    //获取链接
    NSURL *url = [NSURL URLWithString:model.thumbURL];
    //设置图片链接和占位图片
    [cell.imageView sd_setImageWithURL:url  placeholderImage:[UIImage imageNamed:@"placeHoderImage"]];
    return cell;
}
@end
原文地址:https://www.cnblogs.com/chongyu/p/5209451.html