一.这个是一个git上非常出名的写瀑布流的collectView第3方库 包含了OC和SWIFT版本 这里解析的主要是oc Demo方法
https://github.com/chiahsien/CHTCollectionViewWaterfallLayout
这篇文章主要介绍这个库的使用 如果对UICollectView非常感兴趣的的小伙伴 推荐你们看看
http://www.jianshu.com/p/df431a702135
开始
初始化UICollectionView
- (UICollectionView *)collectionView {
if (!_collectionView) {
CHTCollectionViewWaterfallLayout *layout = [[CHTCollectionViewWaterfallLayout alloc] init];
//区内边距
layout.sectionInset = UIEdgeInsetsMake(10, 10, 10, 10);
//区头内边距
layout.headerInset = UIEdgeInsetsMake(10, 10, 10, 10);
//区尾内边距
layout.footerInset = UIEdgeInsetsMake(10, 10, 10, 10);
//cell个数
layout.columnCount = 30;
//区头高度
layout.headerHeight = 40;
//区尾高度
layout.footerHeight = 10;
//列间距
layout.minimumColumnSpacing = 10;
//行间距
layout.minimumInteritemSpacing = 10;
//瀑布流方向
layout.itemRenderDirection = CHTCollectionViewWaterfallLayoutItemRenderDirectionRightToLeft;
//cell最小高度
layout.minimumContentHeight = 50;
//返回某个区的cell的宽度
[layout itemWidthInSectionAtIndex:1];
_collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
_collectionView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
_collectionView.dataSource = self;
_collectionView.delegate = self;
_collectionView.backgroundColor = [UIColor whiteColor];
[_collectionView registerClass:[CHTCollectionViewWaterfallCell class]
forCellWithReuseIdentifier:CELL_IDENTIFIER];
[_collectionView registerClass:[CHTCollectionViewWaterfallHeader class]
forSupplementaryViewOfKind:CHTCollectionElementKindSectionHeader
withReuseIdentifier:HEADER_IDENTIFIER];
[_collectionView registerClass:[CHTCollectionViewWaterfallFooter class]
forSupplementaryViewOfKind:CHTCollectionElementKindSectionFooter
withReuseIdentifier:FOOTER_IDENTIFIER];
}
return _collectionView;
}
cell的定义
CHTCollectionViewWaterfallCell *cell =
(CHTCollectionViewWaterfallCell *)[collectionView dequeueReusableCellWithReuseIdentifier:CELL_IDENTIFIER
forIndexPath:indexPath];
区头区尾的初始化
if ([kind isEqualToString:CHTCollectionElementKindSectionHeader]) {
reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:HEADER_IDENTIFIER
forIndexPath:indexPath];
}
else if ([kind isEqualToString:CHTCollectionElementKindSectionFooter]) {
reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:FOOTER_IDENTIFIER
forIndexPath:indexPath];
}
这些方法 除去第一个定义cell大小 初始化上都可以设置但是这里可以根据你的section 分别作定义
//定义collectView 每个indexPath 的cell的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return [self.cellSizes[indexPath.item %8] CGSizeValue];
}
//定义列数
- (NSInteger)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout columnCountForSection:(NSInteger)section{
return 5;
}
//定义每个区的区头高度
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section{
if (section == 0) {
return 200;
}
return 40;
}
//定义每个区的区尾高度
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForFooterInSection:(NSInteger)section{
return 0;
}
//定义整个区的inset内边距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return (UIEdgeInsets){30,10,20,20};
}
//定义区头的inset内边距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForHeaderInSection:(NSInteger)section{
return (UIEdgeInsets){30,10,20,20};
}
//定义区尾的inset内边距
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForFooterInSection:(NSInteger)section{
return (UIEdgeInsets){30,10,20,20};
}
//定义整个区的每行 内部cell的间距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section{
return 10;
}
//定义整个区的每列的间距
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumColumnSpacingForSectionAtIndex:(NSInteger)section{
return 10;
}