2

プログラムで作成した UICollectionView があります。コレクション ビューの各セルにはラベルが表示され、すべてのラベルは同じプロパティを持ちます。それにもかかわらず、コレクション ビューの中央の列にある各ラベルに含まれるテキストがぼやけて見えることに気付きました。

コレクション ビューの再帰的な記述は、テーブルの中央のセルが常に 10 進数値である x 原点を持っていることを示しています。

 <UICollectionViewCell: 0xd98c1e0; frame = (242.5 0; 220 45); layer = <CALayer: 0xd98c270>> ...

私の質問は次のとおりです。1)これがぼやけの原因になっている可能性がありますか?2) x と y の原点のいずれも 10 進数の値にならないようにする最善の方法は何ですか? (レイアウトを手動で計算することは別として)

参考までに、私の 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
4

1 に答える 1

1

すべてが 2 ピクセルにわたってアンチエイリアス処理されているため、これは確実にぼやけの原因となります (注: Retina スクリーンでは、各ポイントが実際には 2 ピクセルであり、技術的には半分のポイントが 1 つのピクセルとして存在するため、ぼやけは見られません)。これを修正するには、CGRectIntegral を使用してフレームを整数境界に強制する必要がある場合があります。それを行う最良の方法は次のとおりです。

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{
    NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
    for (NSLayoutAttributes *attribute in attributes){
        attribute.frame = CGRectIntegral(attribute.frame);
    }
}

に対しても同じことを行う必要がありますlayoutAttributesForItemAtIndexPath:

于 2013-07-30T22:31:37.233 に答える