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

Iphone UIScrollView:单击一次可将其滚动到顶部,iphone,uiscrollview,paging,Iphone,Uiscrollview,Paging,我将PaginEnabled的UIScrollView设置为YES,并以编程方式将其内容滚动到底部: CGPoint contentOffset = scrollView.contentOffset; contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height; [scrollView setContentOffset:contentOffset animated:YES]; 它成功地滚动,但在那

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

CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height;
[scrollView setContentOffset:contentOffset animated:YES];
它成功地滚动,但在那之后,只要轻轻一按,它的内容就会向上滚动到它刚刚向下滚动之前的偏移量。只有当我通过编程将scrollView的内容滚动到底部然后点击时,才会发生这种情况。当我滚动到任何其他偏移量,然后点击时,什么都没有发生

这绝对不是我想要的。这应该如何解决

非常感谢


帖木儿。

这似乎是一个bug:


我已经在iOS 4.2(模拟器)上对此进行了测试,问题仍然存在。

当滚动滚动视图时,我建议使用

[scrollView scrollRectToVisible:CGRectMake(0,0,1,1)动画:是]

其中,rect是您所追求的位置。(在这种情况下,rect将是scrollview的顶部)


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

以下解决方法确实有帮助(假设您使用一个类别扩展了UIScrollView,因此“self”指的是它的实例):


我刚刚弄明白是什么导致了这个问题,以及如何避免它。如果在滚动视图中将PaginEnabled设置为YES,则必须将contentOffset设置为滚动视图可见大小的倍数(即,您应该位于分页边界上)

具体例子:

如果您的滚动视图(比如)高460像素,内容区域为920,您需要将内容偏移设置为0或460,以避免“滚动到点击时开始”的问题


另外,由于滚动视图将与分页边界对齐,因此最终结果可能会看起来更好。:)

这个小漏洞可以防止UIScrollView在点击时滚动。当滚动视图已启用分页时,似乎会发生这种情况

在UIScrollView委托中添加以下方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    scrollView.pagingEnabled = self.scrollView.contentOffset.x < (self.scrollView.contentSize.width - self.scrollView.frame.size.width);
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
scrollView.PaginEnabled=self.scrollView.contentOffset.x<(self.scrollView.contentSize.width-self.scrollView.frame.size.width);
}

当滚动视图到达水平滚动的右端时,这将禁用分页(在我的用例中,您可以轻松地将其调整到其他方向)。

另一方面,可能我误解了这个问题:DAccatyyc,谢谢您的回复。我用适当的scrollRectToVisible:call替换了setContentOffset:,但不幸的是,这并没有解决问题。wlach,谢谢!但是,当您对高度的满足不是帧高度的倍数时,您将无法获得正确的行为,对吗?:)不确定,但如果内容不是帧高度的倍数,为什么要启用分页?谢谢!我已经将我的案例代码(向右滚动)简化为一行。在下面检查我的答案:)
-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.pagingEnabled == YES)
    {
        if ([scrollView scrolledToBottom] == YES)
            scrollView.pagingEnabled = NO;
    }
    else
    {
        if ([scrollView scrolledToBottom] == NO)
            scrollView.pagingEnabled = YES;
    }
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    scrollView.pagingEnabled = self.scrollView.contentOffset.x < (self.scrollView.contentSize.width - self.scrollView.frame.size.width);
}