我将UIScrollView的pagingEnabled设置为YES,并以编程方式将其内容滚动到底部:
CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height;
[scrollView setContentOffset:contentOffset animated:YES];
它成功滚动,但在此之后,单击它的内容会向上滚动,以便在向下滚动之前向上滚动。只有在我将scrollView的内容滚动到底部然后点击时才会发生这种情况。当我滚动到任何其他偏移然后点击时,没有任何事情发生。
这绝对不是我想得到的。应如何解决?
提前多多谢谢!
铁木尔。
答案 0 :(得分:5)
这个小小的黑客可以防止UIScrollView在点击时滚动。当滚动视图启用了分页时,看起来会发生这种情况。
在您的UIScrollView委托中添加以下方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
scrollView.pagingEnabled = self.scrollView.contentOffset.x < (self.scrollView.contentSize.width - self.scrollView.frame.size.width);
}
当滚动视图在水平滚动中到达右端时,这将禁用分页(我的用例,您可以轻松地将其调整到其他方向)。
答案 1 :(得分:4)
我只是想出了导致这个问题的原因,以及如何避免这个问题。如果在滚动视图上将pagingEnabled设置为YES,则必须将contentOffset设置为滚动视图的可见大小的倍数(即,您应该在分页边界上)。
具体例子:
如果你的滚动视图是(例如)460像素高,内容区域为920,如果你想避免“滚动到点击开始”问题,你需要将内容偏移设置为0或460。
作为奖励,最终结果可能看起来更好,因为您的滚动视图将与分页边界对齐。 :)
答案 2 :(得分:3)
以下解决方法确实有帮助(假设有一个扩展UIScrollView的类别,所以'self'指的是它的实例):
-(BOOL) scrolledToBottom
{
return (self.contentSize.height <= self.frame.size.height) ||
(self.contentOffset.y == self.contentSize.height - self.frame.size.height);
}
然后,有时应该关闭pagingEnabled,只是在滚动视图到达其底部的位置。在委托中(pagingEnabled当然是初始化的,因为只有在启用时才会出现问题):
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.pagingEnabled == YES)
{
if ([scrollView scrolledToBottom] == YES)
scrollView.pagingEnabled = NO;
}
else
{
if ([scrollView scrolledToBottom] == NO)
scrollView.pagingEnabled = YES;
}
}
答案 3 :(得分:1)
答案 4 :(得分:0)
滚动ScrollView时我建议使用
[scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];
矩形是你所追求的位置。 (在这种情况下,rect将是scrollview的顶部)。
更改内容偏移量不是滚动滚动视图的正确方法。