Iphone setContentOffset有问题:已设置动画:是

Iphone setContentOffset有问题:已设置动画:是,iphone,Iphone,我在iOS中遇到了一个几乎像是bug的问题。我正在尝试在UIScrollView中进行一些非常简单的滚动。如果我用动画滚动到一个点,它在那里滚动得非常好,但它没有将该点设置为滚动视图。也就是说,当我稍后滚动到其他地方时,它会跳到0,0并从那里开始动画 我正在使用以下代码 [scrollView setContentOffset:CGPointMake(0, 95) animated:YES]; NSLog(@"offset x %@", [[NSNumber numberWithFloat:sc

我在iOS中遇到了一个几乎像是bug的问题。我正在尝试在UIScrollView中进行一些非常简单的滚动。如果我用动画滚动到一个点,它在那里滚动得非常好,但它没有将该点设置为滚动视图。也就是说,当我稍后滚动到其他地方时,它会跳到0,0并从那里开始动画

我正在使用以下代码

[scrollView setContentOffset:CGPointMake(0, 95) animated:YES];
NSLog(@"offset x %@", [[NSNumber numberWithFloat:scrollView.contentOffset.x] stringValue]);
NSLog(@"offset y %@", [[NSNumber numberWithFloat:scrollView.contentOffset.y] stringValue]);
它产生产出

offset x 0
offset y 0
offset x 0
offset y 95
当动画处于关闭状态时,使用完全相同的代码:

[scrollView setContentOffset:CGPointMake(0, 95) animated:NO];
NSLog(@"offset x %@", [[NSNumber numberWithFloat:scrollView.contentOffset.x] stringValue]);
NSLog(@"offset y %@", [[NSNumber numberWithFloat:scrollView.contentOffset.y] stringValue]);
产出

offset x 0
offset y 0
offset x 0
offset y 95
我正在尝试自动滚动到UITextView,以便在通常滚动的位置收听一些键盘通知。但是我在viewDidLoad中做了这个测试,它产生了这些结果

执行scrollView.contentOffset=CGPointMake(0,95);还可以正确设置值。这只是一个动画,没有

编辑: 我实际尝试运行的代码如下:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    //60 is half the available space in portrait mode so it puts the textfield in the centre.
    [self.scrollView setContentOffset:CGPointMake(0, textField.frame.origin.y-60) animated:YES];
}

将视图滚动到正确的位置。但由于它似乎没有正确设置contentOffset,因此它始终从0,0开始动画。现在,不管我在动画之间等待多长时间。

该值是在动画逐步进行时设置的。因此,如果您在启动后立即进行检查,它将为0,几秒钟后进行检查,它就会正常。

设置动画:是的,您使用CoreAnimation,而不是立即设置contentOffset

试试这个:

[scrollView setDelegate:self];
然后

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    // Do something
}

我认为加布里埃尔和丹尼的答案都是正确的。在您的第一个代码片段中,您实际上是在设置最终值之前尝试获取它们。也就是说,当你调用这个

[scrollView setContentOffset:CGPointMake(0, 95) animated:YES];
基本上,您可以启动另一个线程,该线程为您的scrollView移动设置动画,然后立即尝试获取更新的值。它们将由第二个线程更新,您可以在一些委托函数中捕获它们,例如scrollViewDidScroll:、scrollViewDidEndScrollingAnimation:等

但若你们是说,最终你们的立场并没有改变,那个么问题就不在这里了。我认为你提供的信息与问题本身无关

---如果使用的是表视图,则应检查是否使用

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
在tableViewController类中。如果您这样做了,您应该将带有setOffset的代码放在它的主体中,而不是viewDidLoad


---如果您的textView被放置在某种类型的弹出窗口上,如UIAlertView,并且您希望正确放置它,那么您应该查看setTransform:UIAlertView的方法。但据我所知,它的问题在4.2版本中已经修复

我不认为这是问题所在,我对我的问题进行了一点编辑,以便更清楚。我有一个“下一步”按钮,它运行上述操作,无论我在动画之间等待多长时间,它仍然从原点0,0开始下一步。即偏移量设置不正确。