UIScrollView setContentOffset 滚动到内容大小之外并且不会返回
UIScrollView setContentOffset scrolls outside the content size and doesn't snap in back
我想滚动到 UIScrollView
的顶部。你有两种可能性:
setContentOffset()
scrollView.contentOffset
如果我使用动画,则滚动视图有时会滚动到 (0, -26)
而不是 (0, 0)
。所以它会进一步滚动,但不会返回到 (0, 0)
。这目前仅发生在 iPad。
如果我不使用动画,那么每次都能按预期工作。有人知道这里出了什么问题吗?我在 iPad 2 iOS 8.4 模拟器
上测试了这个
编辑:
在我用 setContentOffset()
打电话之前,我有这个:
scrollView.layoutIfNeeded();
scrollView.setContentOffset(somePosition, true);
删除 layoutIfNeeded
也会解决问题。但是为什么?
注意:我没有连续多次调用 setContentOffset()
。那是完全不同的任务!
这样试试:
scrollView.layoutIfNeeded();
delay(0.05) {
scrollView.setContentOffset(somePosition, true);
}
(此处 delay
为:dispatch_after - GCD in swift?)
我的想法是,这可能会在我们继续之前给布局时间。
另一个想法可能是尝试颠倒这两行的顺序:
scrollView.setContentOffset(somePosition, true);
scrollView.layoutIfNeeded();
这里的想法是布局将在动画期间发生,我们知道布局是设计以在动画期间工作(这就是为什么在旋转期间布局变化是动画的,例如)。
我想滚动到 UIScrollView
的顶部。你有两种可能性:
setContentOffset()
scrollView.contentOffset
如果我使用动画,则滚动视图有时会滚动到 (0, -26)
而不是 (0, 0)
。所以它会进一步滚动,但不会返回到 (0, 0)
。这目前仅发生在 iPad。
如果我不使用动画,那么每次都能按预期工作。有人知道这里出了什么问题吗?我在 iPad 2 iOS 8.4 模拟器
上测试了这个编辑:
在我用 setContentOffset()
打电话之前,我有这个:
scrollView.layoutIfNeeded();
scrollView.setContentOffset(somePosition, true);
删除 layoutIfNeeded
也会解决问题。但是为什么?
注意:我没有连续多次调用 setContentOffset()
。那是完全不同的任务!
这样试试:
scrollView.layoutIfNeeded();
delay(0.05) {
scrollView.setContentOffset(somePosition, true);
}
(此处 delay
为:dispatch_after - GCD in swift?)
我的想法是,这可能会在我们继续之前给布局时间。
另一个想法可能是尝试颠倒这两行的顺序:
scrollView.setContentOffset(somePosition, true);
scrollView.layoutIfNeeded();
这里的想法是布局将在动画期间发生,我们知道布局是设计以在动画期间工作(这就是为什么在旋转期间布局变化是动画的,例如)。