我有一个以编程方式创建的UICollectionView。集合视图中的每个单元格都显示一个标签,并且所有标签都具有相同的属性。尽管如此,我注意到集合视图中心列中每个标签中包含的文本看起来都很模糊。
集合视图的递归描述显示表中的中心单元格始终具有x原点,即十进制值:
<UICollectionViewCell: 0xd98c1e0; frame = (242.5 0; 220 45); layer = <CALayer: 0xd98c270>> ...
我的问题是:1)这会导致模糊吗? 2)确保x和y起源都没有小数值的最佳方法是什么? (除了手动计算布局)
供参考,这是我的UICollectionView代码:
//subclass UICollectionViewFlowLayout
@implementation LabelLayout
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{
return YES;
}
- (id)init
{
self = [super init];
if (self) {
[self setup];
}
return self;
}
-(void)prepareLayout
{
[super prepareLayout];
_cellCount = [[self collectionView] numberOfItemsInSection:0];
}
- (void)setup
{
self.itemSize = CGSizeMake(220.0f, 45.0f);
self.sectionInset = UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
self.minimumLineSpacing = 10.0f;
self.minimumInteritemSpacing = 20.0f;
}
@end
答案 0 :(得分:1)
这肯定会导致模糊,因为一切都在两个像素上消除锯齿(注意:在视网膜屏幕上,你不会看到任何模糊,因为每个点实际上是两个像素所以技术上半点作为单个像素存在) 。要修复它,您可能必须使用CGRectIntegral强制框架为整数边界。最好的方法是:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
for (NSLayoutAttributes *attribute in attributes){
attribute.frame = CGRectIntegral(attribute.frame);
}
}
你应该对layoutAttributesForItemAtIndexPath:
做同样的事情。