UICollectionViewFlowLayout不使用整数帧

Tar*_*ark 3 cocoa-touch ios6 uicollectionview

我最近开始使用UICollectionView,对UICollectionViewFlowLayout有点困惑.似乎计算集合视图中每个单元格的帧,每个项目之间的空间相等.这会导致某些单元格的帧具有小数位置,这会导致标签模糊和图像像素未对齐等等.

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

https://github.com/rmaz/BlurryCollectionView

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

Rap*_*aad 8

解决办法:子类UICollectionViewFlowLayout,覆盖UICollectionViewLayout-layoutAttributesForElementsInRect:,并为每一个布局属性使框架积分:

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

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

最好,拉斐尔

  • 根据定义,如果您希望在没有休息的情况下不能分割宽度的整数单元格,则会有不均匀的间距. (2认同)