限制UIScrollView中的可滚动区域

Mon*_*ong 7 iphone uiscrollview

我有一个UIScrollView滚动一个相当大的UIView.

在某些时候,我想限制用户可以滚动的区域.例如,我可能只想让他们查看视图的底部四分之一.

我可以通过覆盖scrollViewDidScroll来限制区域,然后在视图滚动太远的情况下调用setContentOffset.但是这样我就无法像UIScrollView那样顺利地反弹,当滚动超出UIView的范围时.

有没有更好的方法来限制UIScrollView中的可滚动区域?

tre*_*rsm 17

我会将滚动视图的contentSize属性更改为您希望用户能够滚动的区域的大小,并调整子视图的frame.origin,使得您想要的左上边界出现在(0,0)相对于滚动视图.例如,如果您的视图高度为800点,并且您希望显示底部四分之一,请将contentSize的高度设置为200,并将view.frame.origin的y分量设置为-600.

  • 你的回答只是解决我遇到的类似问题所需的正确提示.基本上uiscrollview.frame.size和uiscrollview.contentsize之间的差异成为允许的可滚动部分.您可以使用uiview.frame和uiview.size以您喜欢的方式播放放置在uiscrollview中的uiview,以获得所需的效果.一旦你理解了这一点,生活就会好起来.快乐滚动!:) (3认同)

Yok*_*oko 5

我发现了一些对我有用的东西。让我们滚动到点0,0,但不进一步:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x <= -1) {
        [scrollView setScrollEnabled:NO];
        [self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
        [scrollView setScrollEnabled:YES];
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以对顶部,底部或右侧(x或y)执行相同的操作

  • 这种方法的问题是您丢失了“反弹”,即在该区域上滚动并在松开时滚动轻轻地向后弹回。 (2认同)