美文网首页
UIcollectionView等间距居中换行

UIcollectionView等间距居中换行

作者: 巧克力色可可 | 来源:发表于2017-05-11 15:30 被阅读555次

    最近项目有个需求,是展示一堆供用户选择的标签,根据宽度自动换行,自动居中,可滑动,综上选择了UICollectionView,因为之前几乎都是用TableView,所以用此篇日志来记录下来遇见的坑。

    先上个效果图:

    02.gif

    我用一个point记录了每一个item的origin。因为每个标签的长度不同,故更新point时需要将下一个item的宽度计算出来,再决定是否要换行。

    这样得到了所有item的布局信息,但是这样并没有满足居中的需求,你需要重写这个方法:

    - (nullable NSArray< UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect;
    

    这个方法返回collectionView中所有单元格和视图的布局属性,我们在这里拿到之前设置好的布局属性然后更改,使每一行的视图都居中。

    代码如下:

    [_dic enumerateKeysAndObjectsUsingBlock:^(NSString *y, NSArray *arr, BOOL * _Nonnull stop) {
            CGFloat width = 0;
            CGFloat originX = 0;
            for (int i=0; i<arr.count; i++) {
                UICollectionViewLayoutAttributes *att = arr[i];
                width += att.frame.size.width;
                if (i == 0) originX = att.frame.origin.x;
            }
            width += (arr.count-1)*_columnSpace;
            CGFloat startX = (kWidth-width)/2.;
            CGFloat cha = startX - originX;
            for (int i=0; i<arr.count; i++) {
                UICollectionViewLayoutAttributes *att = arr[i];
                att.frame = CGRectMake(att.frame.origin.x+cha, att.frame.origin.y, att.frame.size.width, att.frame.size.height);
                [_attributeDic setObject:att forKey:att.indexPath];
            }
        }];
    

    至此,效果已基本达到,如果有更好的方法,欢迎来一起讨论。
    Demo摸我

    相关文章

      网友评论

          本文标题:UIcollectionView等间距居中换行

          本文链接:https://www.haomeiwen.com/subject/eybotxtx.html