Как получить прямую кишку UICollectionViewCell?
UITableView
имеет способ rectForRowAtIndexPath:
, но это не существует в UICollectionView. Я ищу хороший чистый способ захватить ограничивающий прямоугольник ячейки, возможно, тот, который я мог бы добавить в качестве категории на UICollectionView
.
5 ответов:
лучший способ, который я нашел, чтобы сделать это следующее:
UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];
тогда вы можете получить доступ к местоположению через любой
attributes.frame
илиattributes.center
для получения идеального кадра требуется всего две строки кода:
UICollectionViewLayoutAttributes * theAttributes = [collectionView layoutAttributesForItemAtIndexPath:indexPath]; CGRect cellFrameInSuperview = [collectionView convertRect:theAttributes.frame toView:[collectionView superview]];
в swift 3
let theAttributes:UICollectionViewLayoutAttributes! = collectionView.layoutAttributesForItem(at: indexPath) let cellFrameInSuperview:CGRect! = collectionView.convert(theAttributes.frame, to: collectionView.superview)
в 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
как о
-(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