子类化 UIScrollView 时的奇怪行为

Posted

技术标签:

【中文标题】子类化 UIScrollView 时的奇怪行为【英文标题】:Weird behavior when subclassing UIScrollView 【发布时间】:2013-12-02 19:03:33 【问题描述】:

我有一个滚动视图,它具有可变数量的 UIImageView 子视图。我将 UIScrollView 子类化,因为我希望能够使用手势移动和调整图像大小,并执行一些其他自定义行为。一旦我将滚动视图切换到 nib 文件中的子类,就会发生一些奇怪的事情:滚动视图会垂直扩展并在向上滚动时覆盖其他视图,并且底部边缘停止在全屏附近并留下很大的间隙...但是当我将它改回常规的 UIScrollView 时,它很好。我没有覆盖我的子类中的任何内容,也没有在笔尖中设置任何我认为可能导致这种情况的东西......我所做的只是覆盖 addSubview 方法,并在子视图中添加手势识别器,因为它们被添加到我的滚动视图中,并且当然有处理这些手势识别器的方法。关于我做错了什么有什么想法吗?

提前致谢!

【问题讨论】:

我尝试重新创建项目,但无法重现该问题。是否可以获得示例项目?话虽如此,当事情开始以无意的方式发生变化时,我的第一个猜测是查看自动布局。尝试关闭情节提要或笔尖的自动布局选项,看看是否遇到同样的问题。 不要认为我可以发布任何代码,因为它是一个公司项目,在 NDA 等之下。我正在缩小范围,虽然......当我注释掉我的子类的整个实现时,但仍然使用它(基本上,只是在名称中子类化)它正常工作......所以问题必须在我的实现而不是笔尖。只需要开始重新添加代码,直到我发现问题:) 好的,确实是我的平移手势导致了问题......当我重新添加它时,滚动变得很时髦。似乎在视图之间平移,我打算简单地使用滚动视图的内置平移,而不是触发所有子视图平移!有多种方法可以解决这个问题...可能需要一个手势或另一个手势失败,或者测试平移是否落在子视图的范围内(我认为我不必这样做)。 【参考方案1】:

知道了!问题似乎在于我有一个名为handlePan 的方法……通过这样做,我无意中覆盖了一个同名的UIScrollView 方法。所以,我的handlePan(我原本打算只处理我的子视图的平底锅)改为处理所有平底锅,包括滚动视图的内置平底锅,并导致奇怪的滚动。哎呀!问题解决了。

【讨论】:

以上是关于子类化 UIScrollView 时的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:使用延迟实例化时的奇怪错误行为

使用两个着色器时的opengl奇怪行为

释放对象时的奇怪行为

带有嵌套图像的 UiScrollview 看起来很奇怪

UIScrollView 行为奇怪

奇怪的 UIScrollView 行为