【发布时间】:2016-05-27 23:00:07
【问题描述】:
我想滚动到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()。那是完全不同的任务!
【问题讨论】:
-
您是否更改了其他内容,例如插图?和往常一样,发布基本的代码行可能会对您有所帮助。
-
我不改变插图,只改变内容偏移量。在滚动之前我唯一要做的就是在滚动视图中添加一些新项目。通过设置内容偏移(仅此而已),代码行本身非常简单。但是在我复杂的项目中还有其他东西,似乎有这个效果。当我在按钮的帮助下滚动到顶部时(完全独立于我之前添加到滚动视图中的内容),这也与动画完美配合。所以也许这是一个时间问题。
-
听起来确实是时间问题。布局需要时间。动画需要时间。那么当你说两者时会发生什么?说
layoutIfNeeded实际上并不是一件很常见的事情(在某些非常特殊的情况下它是正确的)。我想知道你为什么要这样做......我也模糊地想知道颠倒这两行的顺序是否会有所帮助。 -
@matt:我有这个是因为另一个问题。这里我很早就更改了内容偏移量(来自
layoutSubviews)。没有这个,应用程序崩溃了。现在我正在检查我是否还需要这个。 -
@testing 你想让我把它作为建议添加到我的回答中吗?我并没有真正解决问题,只是向您展示我所做的事情,正如您正确推断的那样,似乎存在时间问题。 — 已添加。
标签: ios ipad uiscrollview animated contentoffset