UIScrollView 内 UIScrollView 内 UIScrollView

Posted

技术标签:

【中文标题】UIScrollView 内 UIScrollView 内 UIScrollView【英文标题】:UIScrollView within UIScrollView within UIScrollView 【发布时间】:2012-09-25 22:36:16 【问题描述】:

我在水平UIScrollView 和垂直UIScrollView 中有一个多向UIScrollView。当我达到最里面的滚动视图的水平内容限制时,包含的水平滚动视图开始按我的意愿滚动​​。

但是当我达到最内层滚动视图的垂直内容限制时,我没有在***垂直滚动视图上获得任何操作。

如果所有垂直内容在最内层可见(因此不可能垂直滚动),则顶层垂直滚动视图可以正常工作。有关如何解决此问题的任何线索?

如果我将他们的照片分页滚动视图嵌入到垂直滚动视图中,我会在 Apple“PhotoScroller”示例代码中得到相同的行为。如果照片没有缩放,那么水平和垂直滚动视图都可以工作。如果照片已缩放但由于达到水平或垂直限制而停止平移,则只有水平滚动视图有效。

这是使用旧版本的示例代码,将照片分页实现为 UIScrollView 而不是 UIPageViewController。使用当前 UIPageViewController 版本,缩放照片时无法进行分页。

【问题讨论】:

【参考方案1】:

为了回答我自己的问题,我使用了gestureRecognizerShouldBegin: 委托来确定当平移手势开始时最里面的scrollView 是否处于边界。如果是这样,我回复了 shouldRecognizeSimultaneouslyWithGestureRecognizer: 委托在内部滚动视图和垂直滚动视图上启用 UIPanGestureRecognizer。这允许一个手势同时滚动两者。然后,我在两个 scrollViews 上都覆盖了 setContentOffset 以抑制错误的滚动。

我认为更好的答案可能是将内部 UIScrollView 上的 UIPanGestureRecognizer 替换为自定义手势识别器,该手势识别器在从边界开始并拖过边界时会自行取消。但是,我无法让它发挥作用。

我仍然不清楚为什么它的水平版本会自动工作。也许 UIScrollViewPanGestureRecognizer 中有一些特殊情况处理来处理水平大小写,或者与直接 superView 交互。

【讨论】:

以上是关于UIScrollView 内 UIScrollView 内 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

iOS控件详解之UIScrollView

动态检测 UIScrollView 的高度

带有 ImageView 的 UIScrollView 不垂直滚动

如何阻止 UIScrollView 吞下触摸

UIScrollView 或 UIPageViewController

在 UIScrollView 上放置自定义层