在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方法。我的两个问题都被消除了,我找不到任何负面后果。这不是解决方案,我不会使用这种方法,因为我不知道我到底做了什么。
答案 0 :(得分:0)
使用UIViewController和UITableView而不是UITableViewController。它解决了我的问题:)
答案 1 :(得分:0)
我在iOS 14中也遇到了同样的问题。似乎没有阻止_adjustContentOffsetIfNecessary
的正常方法。在问题视图中覆盖didMoveToWindow()
对我有帮助
override func didMoveToWindow() {
super.didMoveToWindow()
// window == nil when new screen pushed
if window == nil {
// Set correct offset that was before
}
}