ios - UICollectionView 当前可见单元格索引

我第一次在我的 iPad 应用程序中使用 UICollectionView。 我已设置 UICollectionView 使其大小和单元格大小相同,意味着一次只显示一次单元格。

问题: 现在,当用户滚动 UICollectionView 时,我需要知道哪个单元格可见,我必须在更改时更新其他 UI 元素。我没有找到任何委托(delegate)方法。我怎样才能做到这一点?

代码:

[self.mainImageCollection setTag:MAIN_IMAGE_COLLECTION_VIEW];
[self.mainImageCollection registerClass:[InspirationMainImageCollectionCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[self.mainImageFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.mainImageFlowLayout setMinimumInteritemSpacing:0.0f];
[self.mainImageFlowLayout setMinimumLineSpacing:0.0f];
self.mainImageFlowLayout.minimumLineSpacing = 0;
[self.mainImageCollection setPagingEnabled:YES];
[self.mainImageCollection setShowsHorizontalScrollIndicator:NO];
[self.mainImageCollection setCollectionViewLayout:self.mainImageFlowLayout];

我尝试过的:

由于 UICollectionView 符合 UIScrollView,当用户滚动以 UIScrollViewDelegate 方法结束时我得到了

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

但是在上面的函数中,我怎样才能得到 UICollectionView 的当前可见单元格索引?

最佳答案

indexPathsForVisibleItems 可能适用于大多数情况,但有时它会返回一个包含多个索引路径的数组,并且很难找出你想要的那个。在这些情况下,您可以执行以下操作:

CGRect visibleRect = (CGRect){.origin = self.collectionView.contentOffset, .size = self.collectionView.bounds.size};
CGPoint visiblePoint = CGPointMake(CGRectGetMidX(visibleRect), CGRectGetMidY(visibleRect));
NSIndexPath *visibleIndexPath = [self.collectionView indexPathForItemAtPoint:visiblePoint];

当您的收藏 View 中的每个项目都占据整个屏幕时,这尤其适用。

Swift 版本

let visibleRect = CGRect(origin: collectionView.contentOffset, size: collectionView.bounds.size)
let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
let visibleIndexPath = collectionView.indexPathForItem(at: visiblePoint)

https://stackoverflow.com/questions/18649920/

相关文章:

objective-c - 如何将 int 转换为 NSString?

iphone - 即使图像较小,如何使 UITableViewCell 的 ImageView 成为

ios - 如何让 UILabel 显示轮廓文本?

objective-c - libxml/tree.h 没有这样的文件或目录

ios - 键盘出现时如何滚动 UIScrollView?

ios - 如何将度数转换为弧度?

ios - UIAlertView 首先弃用 IOS 9

ios - 如何检查 View Controller 是否以模态方式呈现或推送到导航堆栈上?

objective-c - NSString 带\n 或换行符

ios - 快速创建和播放声音