web-dev-qa-db-fra.com

Comment obtenir le rect d'une UICollectionViewCell?

UITableView a la méthode rectForRowAtIndexPath:, mais cela n'existe pas dans UICollectionView. Je cherche une belle façon propre de saisir le rectangle englobant d'une cellule, peut-être que je pourrais ajouter en tant que catégorie sur UICollectionView.

58
akaru

La meilleure façon que j'ai trouvée pour ce faire est la suivante:

Objectif-C

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

rapide

let attributes = collectionView.layoutAttributesForItem(at: indexPath)

Ensuite, vous pouvez accéder à l'emplacement via attributes.frame ou attributes.center

126
simon

Seules deux lignes de code sont nécessaires pour obtenir un cadre parfait:

Objectif-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

dans Swift 3

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

dans Swift vous pouvez simplement faire:

//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 --------