2010-12-18 64 views
5

我与pagingEnabled的的UIScrollView设置为YES,并以编程方式滚动其内容底部:的UIScrollView:单一的水龙头滚动其顶部

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

它成功地滚动,但在此之后,在单一的水龙头其内容滚动直到抵消它在滚动之前。只有当我programmaticaly滚动scrollView的内容到底部,然后点击。当我滚动到任何其他偏移然后点击时,什么也没有发生。

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

非常感谢提前!

帖木儿。

回答

0

当滚动滚动型我会建议使用

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

当矩形是你后的位置。 (在这种情况下,矩形将是滚动视图的顶部)。

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

+0

另一方面,也许我误解了这个问题:D – Accatyyc 2010-12-18 23:15:25

+0

Accatyyc,谢谢你的回复。我用适当的scrollRectToVisible:call替换了setContentOffset:但不幸的是没有解决问题。 – indexless 2010-12-19 21:05:16

3

以下解决方法确实帮助(假设一个与类别扩展UIScrollView的,所以“自我”是指它的实例):

-(BOOL) scrolledToBottom 
{ 
    return (self.contentSize.height <= self.frame.size.height) || 
      (self.contentOffset.y == self.contentSize.height - self.frame.size.height); 
} 

然后,一个人应该也会转而pagingEnabled关闭,只是在位置滚动视图到达底部。在委托(pagingEnabled是initialy上当然的,因为只有当它被启用时出现问题):

-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.pagingEnabled == YES) 
    { 
     if ([scrollView scrolledToBottom] == YES) 
      scrollView.pagingEnabled = NO; 
    } 
    else 
    { 
     if ([scrollView scrolledToBottom] == NO) 
      scrollView.pagingEnabled = YES; 
    } 
} 
+0

谢谢!我简化了我的案例的代码(向右滚动)到一行。检查我的答案:) – Tomasz 2013-05-06 02:38:54

4

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

具体的例子:

如果你滚动视图是(比方说)高配的920内容区域460个像素,你就需要设置内容偏移为0或460,如果你想避免“滚动开始点击“问题。

作为奖励,最终结果可能会更好看,因为您的滚动视图将与分页边界对齐。 :)

+0

wlach,谢谢!但是当你的高度不是帧高的倍数时,你就不会得到正确的行为,对吧? :) – indexless 2010-12-22 07:15:01

+0

不确定,但如果内容不是帧高度的倍数,为什么还要启用分页? – wlach 2010-12-22 16:47:44

5

这个小黑客可以防止UIScrollView在点击时滚动。看起来像滚动视图启用分页时发生这种情况。

在你的UIScrollView委托添加这个方法:

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

这将禁用分页时滚动视图达到水平滚动条右端(我的使用情况,您可以使其适应其他方向容易)。