3

我最近开始使用 UICollectionView,对 UICollectionViewFlowLayout 有点困惑。看起来集合视图中每个单元格的框架是在每个项目之间的相等空间计算的。这会导致某些单元格的帧具有分数位置,这将导致模糊标签和未对齐的图像像素等。

我很惊讶地发现堆栈溢出没有关于这个的问题,这让我觉得我做错了什么。我创建了一个测试项目,非常简单地演示了这个问题:

https://github.com/rmaz/BlurryCollectionView

这真的是标准行为吗?在我看来,这使得流布局在没有子类化的情况下基本上无法使用。还是我错过了什么?

4

1 回答 1

8

解决方法: subclass UICollectionViewFlowLayout, overrideUICollectionViewLayout-layoutAttributesForElementsInRect:每个布局属性都使框架变得完整:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
    NSArray *allLayoutAttributes = [super layoutAttributesForElementsInRect:rect];
    for (UICollectionViewLayoutAttributes *layoutAttributes in allLayoutAttributes) {
        layoutAttributes.frame = CGRectIntegral(layoutAttributes.frame);
    }
    return allLayoutAttributes;
}

注意:iOS 7UICollectionViewFlowLayout已修复为始终为其单元格的框架使用整体框架。我建议保留 iOS 6.x 的修复程序,但有条件地在 iOS 7 和更新版本中弃用它。

最好的,拉斐尔

于 2013-03-01T02:53:54.050 回答