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
.
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
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)
dans Swift 3
let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath)
let cellFrameInSuperview:CGRect! = collectionView.convert(theAttributes.frame, to: collectionView.superview)
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