如何检测滚动到水平 UICollectionView 的末尾

Posted

技术标签:

【中文标题】如何检测滚动到水平 UICollectionView 的末尾【英文标题】:How to detect scrolling to an end of an horizontal UICollectionView 【发布时间】:2014-06-15 15:40:25 【问题描述】:

您是否知道一种方法来检测用户何时滚动到 UICollectionView 的末尾(或开头)(以加载新内容)。由于 UICollectionView 水平滚动而不是垂直滚动,因此我对滚动到顶部/底部不感兴趣,而是滚动到最左边/最右边。

到目前为止,我发现的唯一方法是将 UICollectionView 子类化,然后将视图控制器注册为委托,当集合视图 willLayoutSubviews 时通知该委托并相应地执行计算。

但是假设我不想继承 UICollectionView,有没有办法检测到 UICollectionView 的结尾/开头的滚动?

编辑: 由于 UICollectionView 继承自 UIScrollView,我可以使用它的委托方法。它如何与水平滚动一起使用?

谢谢

【问题讨论】:

【参考方案1】:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    CGFloat offsetX = scrollView.contentOffset.x;
    CGFloat contentWidth = scrollView.frame.size.width;

    NSLog(@"offset X %.0f", offsetX);
    // If your UICollectionView has 3 cell, the contentWidth is 320,
    // When you scroll from beginning to end of the UICollectionView, it will print:
    // offset X 0
    // offset X 1
    // offset X 2
    // ......
    // offset X 320
    // offset X 640

【讨论】:

【参考方案2】:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    if ([scrollView isKindOfClass:[UICollectionView class]] == YES) 
        CGFloat threshold = 100.0 ;
        CGFloat contentOffset = scrollView.contentOffset.x;
        CGFloat maximumOffset = scrollView.contentSize.width - scrollView.frame.size.width;
        if ((maximumOffset - contentOffset <= threshold) && (maximumOffset - contentOffset != -5.0) )
            //Your code
        
    

【讨论】:

以上是关于如何检测滚动到水平 UICollectionView 的末尾的主要内容,如果未能解决你的问题,请参考以下文章

如何检测scrollView的滚动方向?

使用按钮检测水平滚动 UIScrollView 上的垂直滚动

在 ios 的滚动视图内检测按钮的触摸

ScrollViewer.ChangeView()不会水平滚动

颤动水平滚动一项一项

垂直滚动到水平滚动回到垂直滚动