【发布时间】:2009-05-26 12:13:28
【问题描述】:
我还没有尝试过,但我认为一旦我知道用户想要在子滚动视图中滚动,我就必须禁用父滚动视图的滚动,对吧?
两个滚动视图都是水平滚动的。
如何暂时禁用父级的滚动检测?还是有其他方法?
【问题讨论】:
标签: iphone cocoa-touch uikit uiscrollview
我还没有尝试过,但我认为一旦我知道用户想要在子滚动视图中滚动,我就必须禁用父滚动视图的滚动,对吧?
两个滚动视图都是水平滚动的。
如何暂时禁用父级的滚动检测?还是有其他方法?
【问题讨论】:
标签: iphone cocoa-touch uikit uiscrollview
UIScrollView 有一个名为 scrollEnabled 的属性,您可以将其设置为 NO 以禁用父滚动视图中的滚动。
我还没有尝试过,但您可能会发现它做正确的事,即内部滚动视图滚动直到它无法再滚动,此时外部滚动视图滚动。
【讨论】:
很有可能。最简单的方法是禁用scrollEnabled 属性,您也可以尝试将外部UIScrollView 的contentSize 设置为其边界,使其不会滚动。根据您的需要,您也可以将 No 设置为 bounce,但这基本上会使您的滚动视图像常规 UIView 一样。
如果你控制了所有子UIScrollView的,你可以实现UIScrollViewDelegate协议,但是如果你没有,或者你的子UIScrollView真的是UITableView,或者UICollectionView,那么您就不能真正依赖UIScrollViewDelegate 协议,但请记住UIScrollView 带有panGestureRecognizer,您可以使用它。一种强大但笨拙的方法是在panGestureRecognizer 的state 属性上添加一个观察者,这样您就可以捕获所有事件,而无需成为相关UIScrollView 的代表。
【讨论】:
我这样做了,它确实导致父 scrollView 不再滚动,这很好 但是我通过 presentModalViewController 推送的子 scrollView 仍然不响应滚动事件(例如向上或向下滚动) .我显然错过了一些东西......
编辑:最终通过在父视图上使用“scrollEnabled”使其工作。谢谢。
【讨论】:
在我为内部 ScrollView 的 contentSize 动态设置足够高之前,我遇到了同样的问题,使用:
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,600)];
显然这只是一个硬编码的例子,你应该设置显示整个视图内容所需的高度,最后可能不需要滚动。
似乎使用IBuilder设置scrollView的高度是不够的,所以不需要滚动,这就是为什么我认为sweep事件没有到达内部滚动。
希望这会有所帮助!
【讨论】: