UITableView
にはrectForRowAtIndexPath:
メソッドがありますが、これはUICollectionViewには存在しません。セルの境界長方形をつかむためのすてきなきれいな方法を探しています。おそらく、UICollectionView
のカテゴリとして追加できるものです。
これを行うために私が見つけた最良の方法は次のとおりです。
Objective-C
UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];
スイフト
let attributes = collectionView.layoutAttributesForItem(at: indexPath)
その後、attributes.frame
またはattributes.center
完全なフレームを取得するには、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)
in Swift 3
let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath)
let cellFrameInSuperview:CGRect! = collectionView.convert(theAttributes.frame, to: collectionView.superview)
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