2

uicollectionviewcells の中心が実際の中心の半分であることに気付きました。

例:

セルのフレームを次のように設定します。

[0] {{0, 0}, {100, 100}}
[1] {{100, 100}, {100, 100}}
[2] {{200, 200}, {100, 100}}
[3] {{300, 300}, {100, 100}}
[4] {{400, 400}, {100, 100}}
[5] {{500, 500}, {100, 100}}

注:これは、setFrame とapplyLayoutAttributesから取得した値です。

次のようになります。 実際の見た目

しかし、次のようになります。 どのように見えるべきか

UICollectionViewLayout サブクラスの実装

@implementation CVTLayout

- (void)prepareLayout {
    [super prepareLayout];

    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;


    CGSize size = CGSizeMake(100, 100);
    CGPoint center = CGPointMake(50, 50);
    NSMutableArray *cellAttributes = [[NSMutableArray alloc] init];
    for (int item = 0; item < [cvt.cellValues count]; item++) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:0];
        UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
        attributes.size = size;
        attributes.center = center;
        [cellAttributes addObject:attributes];

        center.x += size.width;
        center.y += size.height;
    }
    cvt.cellAttributes = cellAttributes;
}

- (CGSize)collectionViewContentSize {
    return self.collectionView.bounds.size;
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {
    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;
    return cvt.cellAttributes[indexPath.item];
}

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
    NSMutableArray *layoutAttributes = [[NSMutableArray alloc] init];
    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;
    for (UICollectionViewLayoutAttributes *cellAttributes in cvt.cellAttributes) {
        if (CGRectIntersectsRect(rect, cellAttributes.frame)) {
            [layoutAttributes addObject:cellAttributes];
        }
    }
    return layoutAttributes;
}

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds {
    return false;
}

@end

4

1 に答える 1

1

問題は、セルラベルフレームをセル境界ではなくセルフレームに設定することでした...

于 2013-06-07T09:01:17.890 に答える