【问题标题】:How can I nest a UIScrollView inside a UIScrollView, so that the user can scroll the inner UIScrollView?如何在 UIScrollView 中嵌套 UIScrollView,以便用户可以滚动内部 UIScrollView?
【发布时间】:2009-05-26 12:13:28
【问题描述】:

我还没有尝试过,但我认为一旦我知道用户想要在子滚动视图中滚动,我就必须禁用父滚动视图的滚动,对吧?

两个滚动视图都是水平滚动的。

如何暂时禁用父级的滚动检测?还是有其他方法?

【问题讨论】:

    标签: iphone cocoa-touch uikit uiscrollview


    【解决方案1】:

    UIScrollView 有一个名为 scrollEnabled 的属性,您可以将其设置为 NO 以禁用父滚动视图中的滚动。

    我还没有尝试过,但您可能会发现它做正确的事,即内部滚动视图滚动直到它无法再滚动,此时外部滚动视图滚动。

    【讨论】:

    • 嗨 hatfinch,我想知道如何防止默认行为“内部滚动视图滚动,直到它不能再滚动,此时外部滚动视图滚动”?我希望当用户滚动内部视图时,外部视图可以保留,即使内部视图已滚动到末尾。
    • 您可以在内部滚动视图上注册委托回调,当内部滚动视图开始滚动时禁用外部滚动视图的滚动,并在内部滚动视图完成减速时重新启用它。
    【解决方案2】:

    很有可能。最简单的方法是禁用scrollEnabled 属性,您也可以尝试将外部UIScrollView 的contentSize 设置为其边界,使其不会滚动。根据您的需要,您也可以将 No 设置为 bounce,但这基本上会使您的滚动视图像常规 UIView 一样。

    如果你控制了所有子UIScrollView的,你可以实现UIScrollViewDelegate协议,但是如果你没有,或者你的子UIScrollView真的是UITableView,或者UICollectionView,那么您就不能真正依赖UIScrollViewDelegate 协议,但请记住UIScrollView 带有panGestureRecognizer,您可以使用它。一种强大但笨拙的方法是在panGestureRecognizer 的state 属性上添加一个观察者,这样您就可以捕获所有事件,而无需成为相关UIScrollView 的代表。

    【讨论】:

      【解决方案3】:

      我这样做了,它确实导致父 scrollView 不再滚动,这很好 但是我通过 presentModalViewController 推送的子 scrollView 仍然不响应滚动事件(例如向上或向下滚动) .我显然错过了一些东西......

      编辑:最终通过在父视图上使用“scrollEnabled”使其工作。谢谢。

      【讨论】:

        【解决方案4】:

        在我为内部 ScrollView 的 contentSize 动态设置足够高之前,我遇到了同样的问题,使用:

        [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,600)];
        

        显然这只是一个硬编码的例子,你应该设置显示整个视图内容所需的高度,最后可能不需要滚动。

        似乎使用IBuilder设置scrollView的高度是不够的,所以不需要滚动,这就是为什么我认为sweep事件没有到达内部滚动。

        希望这会有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-17
          • 2010-12-23
          • 1970-01-01
          • 2022-10-18
          • 1970-01-01
          • 2011-03-26
          • 1970-01-01
          相关资源
          最近更新 更多