我有一个带有图片的UIScrollView,当用户滚动到滚动视图的末尾时,我想更新内容。这是我的代码,用于检测何时到达滚动视图的底部:
下面的代码是在scrollViewDidScroll:
委托中实现的
CGFloat scrollViewHeight = imagesScrollView.bounds.size.height;
CGFloat scrollContentSizeHeight = imagesScrollView.contentSize.height;
CGFloat bottomInset = imagesScrollView.contentInset.bottom;
CGFloat scrollViewBottomOffset = scrollContentSizeHeight + bottomInset - scrollViewHeight;
if(imagesScrollView.contentOffset.y > scrollViewBottomOffset){
[imagesView addSubview:imagesBottomLoadingView];
[self downloadImages];
}
我的问题是,当用户滚动到底部时,我的函数被调用了几次,但我只想调用它一次。我尝试使用imagesScrollView.contentOffset.y == scrollViewBottomOffset,但它不起作用,函数没有被调用
9条答案
按热度按时间jm2pwxwz1#
如果您想在swift中检测它们:
iqxoj9l92#
卡洛斯的回答更好。
对于Swift 4.x,您必须更改方法名称:
btxsgosb3#
ldfqzlk84#
有时候你必须在条件中使用+1,因为contentSize.height会多给你几位小数,所以如果你使用这个,你就避免了...
oknrviil5#
你有没有想过添加一个布尔值。当方法第一次被调用时更新它,或者当用户向上滚动时更新它。
6jjcrrmo6#
我使用了一种混合的方法,让我解释一下:
虽然您的演算是正确的,但是您所监听的委托是多余的,因为
scrollViewDidScroll
被调用了很多次,这可能会导致性能问题。您应该(像我一样)使用scrollViewDidEndDragging
和scrollViewDidEndDecelerating
,它们只在每个事件结束时被调用一次。pgvzfuti7#
对于Swift 4.5:
2nbm6dog8#
实现
scrollViewDidScroll:
并在中检查contentOffset
,以达到终点q9yhzks09#
确保视图实现了UIScrollViewDelegate