pre:先看一下实现效果:
一、大致实现步骤:
1.VC里根据imageArr是否存在数据调整高度
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray * arr = self.imageArr[indexPath.row];
if (arr.count > 0) {
return CGSizeMake(CKScreenW, 195);
}else{
return CGSizeMake(CKScreenW, 115);
}
}
2.cell中放一个背景view,初始化frame为zero,根据imageArr的变动设置frame, 放图片
-(id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self initUI];
}
return self;
}
//初始化界面
-(void)initUI{
self.backgroundColor = [UIColor whiteColor];
...
//默认imgView的Frame为Zero
self.imgView = [[UIView alloc]initWithFrame:CGRectZero];
[self addSubview:self.imgView];
}
3.cell中放一个imageArr属性,通过set方法监控数据的变动更改界面
-(void)setImageArr:(NSMutableArray *)imageArr{
_imageArr = imageArr;
CGFloat setX = 20;
CGFloat setY = 0;
//如果有图片数据
if (_imageArr.count > 0) {
//给imgView设置Frame
self.imgView.frame = CGRectMake(0, 115, self.frame.size.width, 70);
//imgView如果有子view就清除一下
if (self.imgView.subviews.count > 0) {
for (UIView *view in self.imgView.subviews) {
[view removeFromSuperview];
}
}
//通过for循环往imgView上添加内容
for (int i =0; i<_imageArr.count; i++) {
if (i == 4) {
break;
}
UIImageView * view = [[UIImageView alloc]initWithFrame:CGRectMake(setX, setY,(self.frame.size.width -100)/4, 70)];
[view setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",_imageArr[i]]]];
[self.imgView addSubview:view];
setX += view.bounds.size.width + 20;
}
}
//如果没有图片数据,则不显示
else{
self.imgView.frame = CGRectZero;
}
}
二、附DEMO
POST:https://github.com/canwhite/QCCollectionViewCellMin-height