Ios 为什么;contentOffset“;使用“UIScrollView”后,UIScrollView的;scrollRectToVisible";?

Ios 为什么;contentOffset“;使用“UIScrollView”后,UIScrollView的;scrollRectToVisible";?,ios,objective-c,uiscrollview,scrollview,Ios,Objective C,Uiscrollview,Scrollview,虽然我使用了“scrollRectToVisible”方法,但属性“contentOffset”的值保持不变,尽管在Scroll视图中可视地移动了帧。我认为“contentOffset”反映了它在滚动视图中移动/滚动的程度。这是我的密码: NSLog(@"Offset Before: %f", scrollView.contentOffset.x); CGRect rectToScroll = CGRectMake(

虽然我使用了“scrollRectToVisible”方法,但属性“contentOffset”的值保持不变,尽管在Scroll视图中可视地移动了帧。我认为“contentOffset”反映了它在滚动视图中移动/滚动的程度。这是我的密码:

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);

“子视图”表示UIScrollView中的UIImageView,但对于这个问题,它并不重要。

您在实际滚动发生之前检查了偏移量。contentOffset属性反映当前状态,而不是将来的状态。scrollRectToVisible仅启动动画,该动画将在一段时间后结束。我不确定是否将动画设置为“否”会立即滚动(它可以直接设置contentOffset,也可以使用0时间启动动画,这可能会立即处理,也可能不会立即处理)。查看contentOffset是否实际更改的最简单方法是实现
-(void)scrollViewDidScroll:(UIScrollView*)scrollView。或者像这样做快速检查(注意这1秒是仲裁)


我在之前和之后都检查了:NSLog。是的,您的评论说明动画延迟了属性的更新,我尝试将动画设置为“否”。
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);
});