我有一个 UICollectionView 包含在使用水平 UIViewControllerUICollectionViewFlowLayout 中。我也在使用在我的 UIStoryboard 中创建的原型(prototype)单元格。我想创建一个自定义分页,所以我使用 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

问题是,每次我尝试获取与 targetContentOffset(滚动 View 中滚动将停止的点)对应的 indexPath 时,即使该点显然位于集合 View contentSize 内,集合 View 也会返回 nil。

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    NSIndexPath *indexPath = [_collectionView indexPathForItemAtPoint:(*targetContentOffset)];
    // Do something with indexPath
}

我究竟做错了什么?

最佳答案

collectionView 还不知道 targetContentOffset 的 indexPath。

您必须要求 collectionViewLayout 为您提供将在此位置布局的项目的属性。

尝试这样的事情:

UICollectionViewLayoutAttributes *attribute = [_collectionView.collectionViewLayout layoutAttributesForElementsInRect:(CGRect){(*targetContentOffset).x, 0, 10, self.collectionView.bounds.size.height}][0];

10-08 05:28