UIScrollView:单击可将其滚动到顶部

时间:2010-12-18 22:31:23

标签: iphone uiscrollview paging

我将UIScrollView的pagingEnabled设置为YES,并以编程方式将其内容滚动到底部:

CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height;
[scrollView setContentOffset:contentOffset animated:YES];

它成功滚动,但在此之后,单击它的内容会向上滚动,以便在向下滚动之前向上滚动。只有在我将scrollView的内容滚动到底部然后点击时才会发生这种情况。当我滚动到任何其他偏移然后点击时,没有任何事情发生。

这绝对不是我想得到的。应如何解决?

提前多多谢谢!

铁木尔。

5 个答案:

答案 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)

这似乎是一个错误:

UIScrollView doesn't remember the position

我已经在iOS 4.2(模拟器)上测试了这个问题,问题仍然存在。

答案 4 :(得分:0)

滚动ScrollView时我建议使用

[scrollView scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];

矩形是你所追求的位置。 (在这种情况下,rect将是scrollview的顶部)。

更改内容偏移量不是滚动滚动视图的正确方法。