8

我有一个自定义的水平集合视图,它有 1 行,我想添加拉动刷新功能,默认情况下,它显示在我的单元格行上方。我希望用户能够从左到右拉集合视图以激活 UIRefreshControl。有任何想法吗?

提前致谢。

4

3 回答 3

7

基本上,上面的响应告诉您如何在 Objective-C 中在 UICollectionView 中加载更多内容。但是,我认为问题是如何拉动以在该组件上水平刷新。

我认为您不能水平添加 UIRefreshControl 但考虑到前面的代码并转换为 Swift 我想出了以下代码

不要忘记将您的 UICollectionView 反弹属性设置为 TRUE

func scrollViewDidScroll(scrollView: UIScrollView) {
    let offset = scrollView.contentOffset
    let inset = scrollView.contentInset
    let y: CGFloat = offset.x - inset.left
    let reload_distance: CGFloat = -75
    if y < reload_distance{
        scrollView.bounces = false
        UIView.animateWithDuration(0.3, animations: { () -> Void in
             scrollView.setContentOffset(CGPointMake(0, 0), animated: false)
        }, completion: { (Bool) -> Void in
             scrollView.bounces = true
        })
    }
}

另外,为了避免连续拉动的问题,我添加了一些代码来临时删除弹跳,动画 de 滚动回到右侧,然后再次启用弹跳。这将为您提供与 UIRefreshControl 相同的效果。

最后,如果你想要一个加载图标,我的建议是将它添加到控制器后面,这样当你拉动时你可以在后面看到它

于 2015-05-27T20:55:12.030 回答
2

只需添加 Julio Bailon 答案的 Obj-C 版本,它适用于将 collectionView 从其顶部(即从左到右)拉出

    CGPoint offset = scrollView.contentOffset;
    CGRect bounds = scrollView.bounds;
    CGSize size = scrollView.contentSize;
    UIEdgeInsets inset = scrollView.contentInset;
    float y = offset.x - inset.left;
    float h = size.width;


    float reload_distance = -75; //distance for which you want to load more
    if(y < reload_distance) {
        // write your code getting the more data
        NSLog(@"load more rows");

    }
于 2017-01-30T11:38:25.377 回答
1

为此,您需要实现 UIScrollViewDelegate 方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
     CGPoint offset = scrollView.contentOffset;
     CGRect bounds = scrollView.bounds;
     CGSize size = scrollView.contentSize;
     UIEdgeInsets inset = scrollView.contentInset;
     float y = offset.x + bounds.size.width - inset.right;
     float h = size.width;


     float reload_distance = 75; //distance for which you want to load more
     if(y > h + reload_distance) {
        // write your code getting the more data
        NSLog(@"load more rows");

     }
 }
于 2014-04-02T06:50:34.053 回答