IOS OC关于如何让collectionview左对齐

首先知识点
1 获取一个view的最右边的x值
CGRectGetMaxX(prevLayoutAttributes.frame);
2 获取一个view的最下面y值
CGRectGetMaxY(prevLayoutAttributes.frame);
3 uicollectionViewFlowLayout有个layoutAttributesForElementsInRect方法,这个方法返回所有的cell的布局参数的数组
4 解决方法
重写layoutAttributesForElementsInRect方法


  • (NSArray *) layoutAttributesForElementsInRect:(CGRect)rect {
    // 获取系统帮我们计算好的Attributes
    NSArray *answer = [super layoutAttributesForElementsInRect:rect];

    // 遍历结果
    for(int i = 1; i < [answer count]; ++i) {

      // 获取cell的Attribute,根据上一个cell获取最大的x,定义为origin
      UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i];
      UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1];
      
      //此处根据个人需求,我的需求里面有head cell两类,我只需要调整cell,所以head直接过滤
      if([currentLayoutAttributes.representedElementKind isEqualToString:UICollectionElementKindSectionHeader]){
          continue;
      }
      
      NSInteger preX = CGRectGetMaxX(prevLayoutAttributes.frame);
      NSInteger preY = CGRectGetMaxY(prevLayoutAttributes.frame);
      NSInteger curY = CGRectGetMaxY(currentLayoutAttributes.frame);
      
      // 设置cell最大间距
      NSInteger maximumSpacing = 0;
      
      // 如果当前cell和precell在同一行
      if(preY == curY){
          //满足则给当前cell的frame属性赋值
          //不满足的cell会根据系统布局换行
          CGRect frame = currentLayoutAttributes.frame;
          frame.origin.x = preX + maximumSpacing;
          currentLayoutAttributes.frame = frame;
      }
    

    }
    return answer;
    }


参考
https://www.jianshu.com/p/f042944a605d

你可能感兴趣的:(IOS OC关于如何让collectionview左对齐)