UIScrollView ScrollRectToVisible - 不使用animate = yes

ori*_*zil 5 objective-c uiscrollview animated ios

我有一个包含按钮的UIScrollView.按下按钮时,我想使用scrollRectToVisible滚动到视图的底部.

例如:

CGRect r = CGRectMake(0, myUIScrollView.contentSize.height - 1, 1, 1);
[myUIScrollView scrollRectToVisible:r animated:YES];
Run Code Online (Sandbox Code Playgroud)

如果我将动画设置为NO,一切都按预期工作,但如果我将其设置为YES,我会看到非常奇怪的行为:

  • 基本上没有任何反应.
  • 如果我反复点击按钮,它可以滚动几个像素,或者可以一直滚动.
  • 但如果我在按下按钮之前用手指手动滚动视图,它有可能按预期滚动到底部,但这不是一个确定的事情.

我已经打印了_geScroll_Settings.contentSize,这是预期的.

我也尝试通过启动计时器来延迟调用scrollRectToVisible,但结果几乎相同.

scrollView非常香草.我在界面构建器中创建它.我在启动时动态添加scrollView的内容,并适当地调整它的contentSize,但所有这些似乎都正常工作.

有什么想法吗?

Can*_*Can 6

我敢打赌,scrollRectToVisible因为可见区域无效(1x1)或者y偏移刚好超出边界而被淘汰,你尝试用scrollView的可见区域大小设置吗?

CGRect rectBottom = CGRectZero;
rectBottom.size = myUIScrollView.frame.size;
rectBottom.origin.y = myUIScrollView.contentSize.height - rectBottom.size.height;
rectBottom.origin.x = 0;

[myUIScrollView scrollRectToVisible:rectBottom animated:YES];
Run Code Online (Sandbox Code Playgroud)

抱歉,我无法帮助你,但我现在不在我的Mac上,所以我无法进行测试.上面的代码将创建一个CGRect,其大小适合scrollView可见部分,并且偏移量将是其中的最后一个可见部分.