在 scrollToItemAtIndexPath 之后获取 UICollectionView 单元格位置

Posted

技术标签:

【中文标题】在 scrollToItemAtIndexPath 之后获取 UICollectionView 单元格位置【英文标题】:Get UICollectionView cell position after scrollToItemAtIndexPath 【发布时间】:2014-05-11 15:02:33 【问题描述】:

我想在以编程方式滚动到一个单元格后获得UICollectionViewCell 的位置。我正在像这样设置滚动位置。

[self.collectionView scrollToItemAtIndexPath:indexPath
                             atScrollPosition:UICollectionViewScrollPositionCenteredVertically
                                        animated:NO];

然后我想获取我滚动到的单元格的框架,因为我需要在它附近放置另一个 UIView

此代码使用滚动视图返回单元格的矩形,但我需要可见矩形内的位置。

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

【问题讨论】:

【参考方案1】:

单元格的框架不会改变,它是封闭滚动视图的内容偏移量。从帧的原点减去contentOffset 以获得屏幕上的位置,或使用convertRect: 方法之一获得相关视图中的坐标。

【讨论】:

谢谢。或者,是否有办法在设置滚动位置后立即获得对该单元格的引用? cellforitematindexpath 此时返回 nil。 它返回 nil 因为单元格当时不在屏幕上。您现有的解决方案可能没问题。【参考方案2】:

这是单元格 X 和中心值

UICollectionViewLayoutAttributes *attributes = [collectionView layoutAttributesForItemAtIndexPath:indexPath];
CGPoint cellCenterPoint = attributes.center;
CGPoint contentOffset = [collectionView contentOffset];
NSLog(@"%f  , %f",-1*contentOffset.x , cellCenterPoint.x);
int  relativeCellCenter = (-1*contentOffset.x) + cellCenterPoint.x +collectionView.frame.origin.x;
int relativeX = (-1*contentOffset.x) +collectionView.frame.origin.x;

【讨论】:

以上是关于在 scrollToItemAtIndexPath 之后获取 UICollectionView 单元格位置的主要内容,如果未能解决你的问题,请参考以下文章

未在 scrollToItemAtIndexPath 上调用 Collectionview Cell Delegate 方法?

scrollToItemAtIndexPath 无法正常工作

UICollectionView scrollToItemAtIndexPath

scrollToItemAtIndexPath 破坏 UICollectionViewCell 布局

更改单元格大小后的 scrollToItemAtIndexPath

UICollectionView - 分离 scrollViewDidScroll 和 scrollToItemAtIndexPath