2

我想滚动到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()连续多次调用。那是完全不同的任务!

4

1 回答 1

4

试试这种方式:

scrollView.layoutIfNeeded();
delay(0.05) {
    scrollView.setContentOffset(somePosition, true);
}

(这里在哪里delaydispatch_after - GCD in swift?

我的想法是,这可能会在我们继续之前给布局时间。

另一个想法可能是尝试颠倒这两行的顺序:

scrollView.setContentOffset(somePosition, true);
scrollView.layoutIfNeeded();

这里的想法是布局将在动画期间发生,并且我们知道布局设计为在动画期间工作(这就是为什么旋转期间的布局更改是动画的原因)。

于 2016-02-16T16:08:56.707 回答