- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{
NSArray *array = [super layoutAttributesForElementsInRect:rect];
for (int i = 0; i < array.count; i ++) {
if (i != array.count - 1){
UICollectionViewLayoutAttributes *currentAtt = array[i];
UICollectionViewLayoutAttributes *nextAtt = array[i+1];
if (CGRectGetMinY(currentAtt.frame) == CGRectGetMinY(nextAtt.frame)) {
if ((CGRectGetMinX(nextAtt.frame) - CGRectGetMaxX(currentAtt.frame)) > self.minimumInteritemSpacing){
CGRect frame = nextAtt.frame;
CGFloat x = CGRectGetMaxX(currentAtt.frame) + self.minimumInteritemSpacing;
frame = CGRectMake(x, CGRectGetMinY(frame), frame.size.width, frame.size.height);
nextAtt.frame = frame;
}
}else{
//下一列自动居左 避免被居中
CGRect frame = nextAtt.frame;
frame = CGRectMake(self.sectionInset.left, frame.origin.y, frame.size.width, frame.size.height);
nextAtt.frame = frame;
}
if (i == 0){
//第一个列 避免被居中
CGRect frame = currentAtt.frame;
frame = CGRectMake(self.sectionInset.left, frame.origin.y, frame.size.width, frame.size.height);
currentAtt.frame = frame;
}
}
else if (i == 0){
//第一列 避免被居中 如果有分区头视图 可注释该判断 添加判断是否为头视图
//因为该layoutAttributes数组包含 头视图,如添加头视图,请在前面添加判断
UICollectionViewLayoutAttributes *currentAtt = array[i];
CGRect frame = currentAtt.frame;
frame = CGRectMake(self.sectionInset.left, frame.origin.y, frame.size.width, frame.size.height);
currentAtt.frame = frame;
}
}
return array;
}
cell里代码使用的是masonry布局,不多做解释
- (instancetype)initWithFrame:(CGRect)frame{
if (self = [super initWithFrame:frame]){
[self initViews];
}
return self;
}
- (void)initViews{
self.contentView.backgroundColor = backColor;
[self.contentView addSubview:self.desLabel];
self.layer.cornerRadius = 15;
self.layer.masksToBounds = true;
[self.desLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.contentView);
make.left.mas_equalTo(self.contentView).offset(10);
make.right.mas_equalTo(self.contentView).offset(-10);
make.width.lessThanOrEqualTo(@(kScreenWidth - 40));
make.width.greaterThanOrEqualTo(@45);
}];
}
- (UILabel *)desLabel{
if (!_desLabel) {
_desLabel = [[UILabel alloc]init];
_desLabel.font = XTMFont(14);
_desLabel.textColor = rgb(89, 89, 89);
_desLabel.textAlignment = NSTextAlignmentCenter;
}
return _desLabel;
}
collectionView里面estimatedItemSize随便给个值就好
layout.estimatedItemSize = CGSizeMake(100, 30);
效果如图:
151569551540_.pic.jpg
demo有时间写一个上传
网友评论