web-dev-qa-db-ja.com

UICollectionViewCellのrectを取得する方法は?

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

58
akaru

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

Objective-C

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

スイフト

let attributes = collectionView.layoutAttributesForItem(at: indexPath)

その後、attributes.frameまたはattributes.center

126
simon

完全なフレームを取得するには、2行のコードのみが必要です。

Objective-C

UICollectionViewLayoutAttributes * theAttributes = [collectionView layoutAttributesForItemAtIndexPath:indexPath];

CGRect cellFrameInSuperview = [collectionView convertRect:theAttributes.frame toView:[collectionView superview]];

Swift 4.2

let theAttributes = collectionView.layoutAttributesForItem(at: indexPath)
let cellFrameInSuperview = collectionView.convert(theAttributes.frame, to: collectionView.superview)
35
Shaik Riyaz

in Swift 3

 let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath)
 let cellFrameInSuperview:CGRect!  = collectionView.convert(theAttributes.frame, to: collectionView.superview)
15
Spydy

in Swift次のようにできます。

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

//if you only need for visible cells
let rect = cellForItemAtIndexPath(indexPath)?.frame
8
Victor --------