UIScrollView setContentOffset 滚动到内容大小之外并且不会返回

UIScrollView setContentOffset scrolls outside the content size and doesn't snap in back

我想滚动到 UIScrollView 的顶部。你有两种可能性:

如果我使用动画,则滚动视图有时会滚动到 (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();

这里的想法是布局将在动画期间发生,我们知道布局是设计以在动画期间工作(这就是为什么在旋转期间布局变化是动画的,例如)。