依然继承UICollectionViewFlowLayout
然后重写- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 方法 ,
但是都是section为1 的情况 特此补充一下 多组情况下的判断
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray*original = [superlayoutAttributesForElementsInRect:rect];
NSMutableArray*attributes = [[NSMutableArrayalloc]initWithArray:originalcopyItems:YES];
//从第二个循环到最后一个,因为第一个不需要修改
for(inti =1; i < [attributescount]; i++) {
//当前attributes
UICollectionViewLayoutAttributes*currentLayoutAttributes = attributes[i];
LOG(@"%@",currentLayoutAttributes.frame);
//上一个attributes
UICollectionViewLayoutAttributes*prevLayoutAttributes = attributes[i -1];
LOG(@"%@",prevLayoutAttributes.frame);
//设置的Cell间距,可根据需要改
NSIntegercellSpacing =10;
//前一个cell的最右边
NSIntegerprevCellRight =CGRectGetMaxX(prevLayoutAttributes.frame);
//如果当前一个cell的最右边加上我们想要的间距加上当前cell的宽度依然在contentSize中,我们改变当前cell的原点位置
//不加这个判断的后果是,UICollectionView只显示一行,原因是下面所有cell的x值都被加到第一行最后一个元素的后面了
if(prevCellRight + cellSpacing + currentLayoutAttributes.frame.size.width
//判断是否是一个组,不然你会发现prevCellRight拿到的是上一组最后一个cell的frame值
if(currentLayoutAttributes.indexPath.section== prevLayoutAttributes.indexPath.section) {
CGRectframe = currentLayoutAttributes.frame;
frame.origin.x= prevCellRight + cellSpacing;
currentLayoutAttributes.frame= frame;
}else{
CGRectframe = currentLayoutAttributes.frame;
frame.origin.x=0;
currentLayoutAttributes.frame= frame;
}
}else{
CGRectframe = currentLayoutAttributes.frame;
frame.origin.x=0;
currentLayoutAttributes.frame= frame;
}
}
returnattributes;
}
网友评论