博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UICollectionView中Cell左对齐 居中 右对齐 等间距------你想要的,这里都有
阅读量:5162 次
发布时间:2019-06-13

本文共 5175 字,大约阅读时间需要 17 分钟。

支持靠左,居中,靠右,等间距对齐。

 

靠左等间距.png
靠左等间距.png
居中等间距.png
居中等间距.png
靠右等间距.png
靠右等间距.png
#import 
typedef NS_ENUM(NSInteger,AlignType){ AlignWithLeft, AlignWithCenter, AlignWithRight};@interface EqualSpaceFlowLayoutEvolve : UICollectionViewFlowLayout//两个Cell之间的距离@property (nonatomic,assign)CGFloat betweenOfCell;//cell对齐方式@property (nonatomic,assign)AlignType cellType;-(instancetype)initWthType : (AlignType)cellType;@end
#import "EqualSpaceFlowLayoutEvolve.h"@interface EqualSpaceFlowLayoutEvolve(){    //在居中对齐的时候需要知道这行所有cell的宽度总和    CGFloat _sumWidth ;}@end@implementation EqualSpaceFlowLayoutEvolve-(instancetype)init{    self = [super init];    if (self){        self.scrollDirection = UICollectionViewScrollDirectionVertical;        self.minimumLineSpacing = 5;        self.minimumInteritemSpacing = 5;        self.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);        _betweenOfCell = 5.0;        _cellType = AlignWithLeft;    }    return self;}-(instancetype)initWthType:(AlignType)cellType{    self = [super init];    if (self){        self.scrollDirection = UICollectionViewScrollDirectionVertical;        self.minimumLineSpacing = 5;        self.minimumInteritemSpacing = 5;        self.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);        _betweenOfCell = 5.0;        _cellType = cellType;    }    return self;}-(void)setBetweenOfCell:(CGFloat)betweenOfCell{    _betweenOfCell = betweenOfCell;    self.minimumInteritemSpacing = betweenOfCell;}- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {    NSArray * layoutAttributes_t = [super layoutAttributesForElementsInRect:rect];    NSArray * layoutAttributes = [[NSArray alloc]initWithArray:layoutAttributes_t copyItems:YES];    //用来临时存放一行的Cell数组    NSMutableArray * layoutAttributesTemp = [[NSMutableArray alloc]init];    for (NSUInteger index = 0; index < layoutAttributes.count ; index++) {                UICollectionViewLayoutAttributes *currentAttr = layoutAttributes[index]; // 当前cell的位置信息        UICollectionViewLayoutAttributes *previousAttr = index == 0 ? nil : layoutAttributes[index-1]; // 上一个cell 的位置信        UICollectionViewLayoutAttributes *nextAttr = index + 1 == layoutAttributes.count ?        nil : layoutAttributes[index+1];//下一个cell 位置信息                //加入临时数组        [layoutAttributesTemp addObject:currentAttr];        _sumWidth += currentAttr.frame.size.width;                CGFloat previousY = previousAttr == nil ? 0 : CGRectGetMaxY(previousAttr.frame);        CGFloat currentY = CGRectGetMaxY(currentAttr.frame);        CGFloat nextY = nextAttr == nil ? 0 : CGRectGetMaxY(nextAttr.frame);        //如果当前cell是单独一行        if (currentY != previousY && currentY != nextY){            if ([currentAttr.representedElementKind isEqualToString:UICollectionElementKindSectionHeader]) {                [layoutAttributesTemp removeAllObjects];                _sumWidth = 0.0;            }else if ([currentAttr.representedElementKind isEqualToString:UICollectionElementKindSectionFooter]){                [layoutAttributesTemp removeAllObjects];                _sumWidth = 0.0;            }else{                [self setCellFrameWith:layoutAttributesTemp];            }        }        //如果下一个不cell在本行,则开始调整Frame位置        else if( currentY != nextY) {            [self setCellFrameWith:layoutAttributesTemp];        }    }    return layoutAttributes;}-(void)setCellFrameWith:(NSMutableArray*)layoutAttributes{    CGFloat nowWidth = 0.0;    switch (_cellType) {        case AlignWithLeft:            nowWidth = self.sectionInset.left;            for (UICollectionViewLayoutAttributes * attributes in layoutAttributes) {                CGRect nowFrame = attributes.frame;                nowFrame.origin.x = nowWidth;                attributes.frame = nowFrame;                nowWidth += nowFrame.size.width + self.betweenOfCell;            }            _sumWidth = 0.0;            [layoutAttributes removeAllObjects];            break;        case AlignWithCenter:            nowWidth = (self.collectionView.frame.size.width - _sumWidth - (layoutAttributes.count * _betweenOfCell)) / 2;            for (UICollectionViewLayoutAttributes * attributes in layoutAttributes) {                CGRect nowFrame = attributes.frame;                nowFrame.origin.x = nowWidth;                attributes.frame = nowFrame;                nowWidth += nowFrame.size.width + self.betweenOfCell;            }            _sumWidth = 0.0;            [layoutAttributes removeAllObjects];            break;                    case AlignWithRight:            nowWidth = self.collectionView.frame.size.width - self.sectionInset.right;            for (NSInteger index = layoutAttributes.count - 1 ; index >= 0 ; index-- ) {                UICollectionViewLayoutAttributes * attributes = layoutAttributes[index];                CGRect nowFrame = attributes.frame;                nowFrame.origin.x = nowWidth - nowFrame.size.width;                attributes.frame = nowFrame;                nowWidth = nowWidth - nowFrame.size.width - _betweenOfCell;            }            _sumWidth = 0.0;            [layoutAttributes removeAllObjects];            break;                }}@end

转载于:https://www.cnblogs.com/liangyi-cn/p/7520387.html

你可能感兴趣的文章
fortran小结
查看>>
redis——搭建
查看>>
“机器学习”原理(由浅入深)
查看>>
vc下tolua++的使用
查看>>
memcached 一致性hash原理
查看>>
github简单使用教程
查看>>
学习typescript(一)
查看>>
配置淘宝镜像
查看>>
java基础介绍(转)
查看>>
无线网卡01
查看>>
( 转)性能测试--地铁模型分析
查看>>
c#获取图片的高和宽
查看>>
Apache(httpd)实现反向代理
查看>>
表单美化-原生javascript和jQuery多选按钮(兼容IE6)
查看>>
parse与stringify
查看>>
tensorflow-TensorBoard
查看>>
C++ 中 delete 和 delete[] 的区别
查看>>
简单范例php调用C# WebService
查看>>
[转] KVM虚拟化技术生态环境介绍
查看>>
【9】分布式锁
查看>>