在 iOS 7 上。我有导航控制器,并在堆栈顶部推送了一个新的 VC。
那个新的 VC 有一个 UIScrollView 填充 VC 的根视图并垂直滚动。如果我向下滚动一点,然后尝试使用“滑动返回”/“滑动弹出”手势,垂直滚动视图首先滚动到顶部,然后识别 interactivePopGesture,我可以拖动顶部的 VC左右堆叠。
为什么会这样?我希望防止我的滚动视图在识别“滑动返回”手势之前自动滚动到顶部。我该怎么做呢?
更新#1:
当我创建一个新的 xcode 项目时,我似乎无法重现这个错误,所以这肯定是我在原始项目中的错误。找到原因后会更新。
更新#2:
当 interactivePopGesture 被识别时,setContentOffset
在我的垂直滚动视图上调用方法。在调试时,我看到它setContentOffset
是从UIScrollViewInternal _adjustContentOffsetIfNecessary
.
更新#3:
同样的问题发生在以下场景中:我在垂直 UIScrollView 中有 UITextFields。当按下某个 UITextField 时,会出现一个键盘。当我想以交互方式关闭键盘时(通过在键盘上拖动滚动视图),在我释放拖动后,会发生故障。UIScrollView 的内容偏移量暂时设置为零,然后设置回原始内容偏移量并继续动画。这个不需要的设置contentOffset
也被调用UIScrollViewInternal _adjustContentOffsetIfNecessary
。
我继续用我自己的 UIScrollView 子类替换了这两种情况下的 UIScrollView。在那个子类中,我将私有方法重写-(void) _adjustContentOffsetIfNecessary
为空的 void 方法。我的两个问题都解决了,我找不到任何负面后果。这不是一个解决方案,我不会使用这种方法,因为我不知道我到底做了什么。