72

UITableViewにはメソッドrectForRowAtIndexPath:がありますが、これは UICollectionView には存在しません。セルの境界四角形を取得するためのきれいな方法を探しています。おそらく、にカテゴリとして追加できる方法UICollectionViewです。

4

5 に答える 5

149

これを行うために私が見つけた最良の方法は次のとおりです。

Objective-C

UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];

迅速

let attributes = collectionView.layoutAttributesForItem(at: indexPath)

attributes.frame次に、またはのいずれかを介して場所にアクセスできますattributes.center

于 2012-09-24T04:54:05.420 に答える
9

迅速に行うことができます:

//for any cell in collectionView
let rect = self.collectionViewLayout.layoutAttributesForItemAtIndexPath(clIndexPath).frame

//if you only need for visible cells
let rect = cellForItemAtIndexPath(indexPath)?.frame
于 2015-05-07T17:43:57.750 に答える
-2

どうですか

-(CGRect)rectForCellatIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = [self cellForItemAtIndexPath:indexPath];

    if (!cell) {
        return CGRectZero;
    }

    return cell.frame;

}

のカテゴリとしてUICollectionView

#import <UIKit/UIKit.h>

@interface UICollectionView (CellFrame)

-(CGRect)rectForCellatIndexPath:(NSIndexPath *)indexPath;

@end


#import "UICollectionView+CellFrame.h"

@implementation UICollectionView (CellFrame)

-(CGRect)rectForCellatIndexPath:(NSIndexPath *)indexPath {

    UICollectionViewCell *cell = [self cellForItemAtIndexPath:indexPath];

    if (!cell) {
        return CGRectZero;
    }

    return cell.frame;

}

@end
于 2012-09-20T06:15:35.253 に答える