我最近开始使用UICollectionView,对UICollectionViewFlowLayout有点困惑。似乎计算集合视图中每个单元格的帧,每个项目之间的空间相等。这会导致某些单元格的帧具有小数位置,这会导致标签模糊和图像像素未对齐等等。
我很惊讶地发现在堆栈溢出时没有关于这个的问题,这让我觉得我做错了。我创建了一个测试项目,非常简单地演示了这个问题:
https://github.com/rmaz/BlurryCollectionView
这真的是标准行为吗?在我看来,这使得流程布局在没有子类化的情况下基本上无法使用。或者我错过了什么?
答案 0 :(得分:8)
解决方法:子类UICollectionViewFlowLayout
,覆盖UICollectionViewLayout
的{{1}},并且每个布局属性都会使框架成为整数:
-layoutAttributesForElementsInRect:
注意:已修复iOS 7 - (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *allLayoutAttributes = [super layoutAttributesForElementsInRect:rect];
for (UICollectionViewLayoutAttributes *layoutAttributes in allLayoutAttributes) {
layoutAttributes.frame = CGRectIntegral(layoutAttributes.frame);
}
return allLayoutAttributes;
}
以始终对其单元格的帧使用整数帧。我建议保留iOS 6.x的修复程序,但有条件地弃用它适用于iOS 7及更高版本。
最佳, 圣拉斐尔