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的主要内容,如果未能解决你的问题,请参考以下文章
带有 ImageView 的 UIScrollView 不垂直滚动