为什么使用"scrollRectToVisible"后UIScrollView的"contentOffset"没有变化?

Why "contentOffset" of UIScrollView did not Change after Using "scrollRectToVisible"?

虽然我使用方法 "scrollRectToVisible",但 属性 "contentOffset" 的值保持不变,尽管在滚动视图中视觉上移动了帧。我认为 "contentOffset" 反映了滚动视图中 moved/scrolled 的多少。这是我的代码:

NSLog(@"Offset Before: %f", scrollView.contentOffset.x);      
       CGRect rectToScroll = CGRectMake(
                                  100,
                                  subview.frame.origin.y,
                                  subview.frame.size.width,
                                  subview.frame.size.height);
[scrollView scrollRectToVisible:rectToScroll animated:YES];
NSLog(@"Offset After: %f", scrollView.contentOffset.x);

"subview"代表UIScrollView里面的UIImageView,不过对于题目来说无所谓。

您在实际滚动发生之前检查了偏移量。 contentOffset 属性 反映当前状态,而不是将来的状态。 scrollRectToVisible 仅启动动画,稍后将结束。我不确定将动画设置为 NO 是否会立即滚动(它可以直接设置 contentOffset 或以 0 时间开始动画,这可能会或可能不会立即处理)。查看 contentOffset 确实发生变化的最简单方法是实现滚动视图委托的 -(void)scrollViewDidScroll:(UIScrollView*)scrollView;。或者做这样的事情来快速检查(注意这 1 秒是任意的)。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSLog(@"Offset After: %f", scrollView.contentOffset.x);
});