We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在实现高度不一致的cell TopLeft对齐时遇到问题; 如下图:
上图中(0,0)设置高度是100,其他都是35,可以看到有错位; groupLayoutAttributesForElementsByYLineWithLayoutAttributesAttrs方法中计算同一行的cell时,获取到的MidY不相等;
奇数/2时理论上得到0.5,可能因为像素对齐(猜测)UICollectionViewFlowLayout计算时赋值给LayoutAttributes的坐标不一定是0.5,导致错误调整了x坐标;
简单解决方案,MidY向上(下)取整,但感觉不够保险;ceil(CGRectGetMidY(attr.frame))
以下是我实现的另外一种方法,比较MinY和MaxY,大佬可以看看是否有更好的办法
- (NSArray *)NEWgroupLayoutAttributesForElementsByYLineWithLayoutAttributesAttrs:(NSArray *)layoutAttributesAttrs{ // - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect 没有明确说明是按照indexPath顺序排列,sorted下更保险 // 对传入的attributes进行排序 NSArray *sortedAttributes = [layoutAttributesAttrs sortedArrayUsingComparator:^NSComparisonResult(UICollectionViewLayoutAttributes *attr1, UICollectionViewLayoutAttributes *attr2) { return [attr1.indexPath compare:attr2.indexPath]; }]; // 分组处理 NSMutableArray *rows = [NSMutableArray array]; NSMutableArray *currentRowAttributes = [NSMutableArray array]; CGFloat currentRowMaxY = 0; for (UICollectionViewLayoutAttributes *attribute in sortedAttributes) { if (currentRowAttributes.count == 0) { // 第一次迭代,初始化第一组 [currentRowAttributes addObject:attribute]; currentRowMaxY = CGRectGetMaxY(attribute.frame); } else { if (attribute.frame.origin.y > currentRowMaxY) { // 开始新的一行 [rows addObject:currentRowAttributes]; currentRowAttributes = @[attribute].mutableCopy; currentRowMaxY = CGRectGetMaxY(attribute.frame); } else { // 添加到当前行 [currentRowAttributes addObject:attribute]; currentRowMaxY = MAX(currentRowMaxY, CGRectGetMaxY(attribute.frame)); } } } // 添加最后一行 if (currentRowAttributes.count > 0) { [rows addObject:currentRowAttributes]; } return [rows copy]; }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在实现高度不一致的cell TopLeft对齐时遇到问题;

如下图:
上图中(0,0)设置高度是100,其他都是35,可以看到有错位;
groupLayoutAttributesForElementsByYLineWithLayoutAttributesAttrs方法中计算同一行的cell时,获取到的MidY不相等;
奇数/2时理论上得到0.5,可能因为像素对齐(猜测)UICollectionViewFlowLayout计算时赋值给LayoutAttributes的坐标不一定是0.5,导致错误调整了x坐标;
简单解决方案,MidY向上(下)取整,但感觉不够保险;ceil(CGRectGetMidY(attr.frame))
以下是我实现的另外一种方法,比较MinY和MaxY,大佬可以看看是否有更好的办法
The text was updated successfully, but these errors were encountered: