5

水平UICollectionView我有了1行中的定制水平收集观点,我想补充拉刷新功能,它在默认情况下,会出现我上面的细胞行。我希望用户能够从左向右拉动集合视图来激活UIRefreshControl。有任何想法吗?与UIRefreshControl

在此先感谢。

回答

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"); 

    } 
} 
+0

感谢您获取上述代码。只是想提及它适用于当您想要在滚动tableview/collectionview结束后加载更多数据,而非顶​​级时。 – hyd00

5

基本上上面的反应告诉你如何使用Objective-C做负载更多的UICollectionView。不过,我相信问题是如何在该组件上进行水平刷新。

我不认为你可以水平增加UIRefreshControl但考虑到前面的代码,使转换到斯威夫特,我想出了以下一个

不要忘记设置您的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 
     }) 
    } 
} 

此外,为了避免与连续拉问题我添加了一些代码以删除临时弹跳,动画德回卷到右侧,然后再次启用弹跳。这会给你与UIRefreshControl相同的效果。

最后,如果你想有一个加载图标我的建议是将其添加的幕后控制人,所以当你拉你可以看到它背后

1

只是增加了Julio Bailon的答案,其工作的对象 - 版本用于将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"); 

    }