水平UICollectionView我有了1行中的定制水平收集观点,我想补充拉刷新功能,它在默认情况下,会出现我上面的细胞行。我希望用户能够从左向右拉动集合视图来激活UIRefreshControl。有任何想法吗?与UIRefreshControl
在此先感谢。
水平UICollectionView我有了1行中的定制水平收集观点,我想补充拉刷新功能,它在默认情况下,会出现我上面的细胞行。我希望用户能够从左向右拉动集合视图来激活UIRefreshControl。有任何想法吗?与UIRefreshControl
在此先感谢。
为此,您需要实现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");
}
}
基本上上面的反应告诉你如何使用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相同的效果。
最后,如果你想有一个加载图标我的建议是将其添加的幕后控制人,所以当你拉你可以看到它背后
只是增加了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");
}
感谢您获取上述代码。只是想提及它适用于当您想要在滚动tableview/collectionview结束后加载更多数据,而非顶级时。 – hyd00