1

我有一个错误,我已经查看了两个多小时,但仍然不知道为什么会发生。我在滚动视图上有一个注册表单,如果键盘挡住了文本字段(在 Editing Did Start 处调用的函数),它会向下滚动。这是发生错误的代码段:

CGPoint scrollerOffset = scroller.contentOffset;
UITextField *currentTextField = sender;
CGPoint textFieldOrigin = currentTextField.frame.origin;


if (scrollerOffset.y < textFieldOrigin.y) {
    scrollerOffset.y = textFieldOrigin.y - currentTextField.frame.size.height;
    NSLog(@"Offset: %f",scrollerOffset.y);
    [scroller setContentOffset:scrollerOffset animated:YES];
}

现在这里是乐趣的开始。

如果我有这样的模拟器并在 Phone Nr 字段内单击,NSLog 显示 scrollerOffset.y 的 590.000 并且文本字段一直跳到滚动视图的顶部,正如它应该显示的那样,就像它旁边的图像所示。

1 2

但是,如果我有这样的模拟器并在 Phone Nr 字段内单击,则 NSLog 再次显示 590.000 但滚动视图不会跳起来显示文本字段...

3 3

编辑:如果我不为滚动设置动画,它会完美运行,只有在动画时才会出错。

4

1 回答 1

1

好吧,经过一天的思考,我找到了解决方案,所以如果有人遇到同样的问题,这就是解决方案:

来自这里的解决方案:http: //www.pressingquestion.com/1128098/Disable-Uiscrollview-Scrolling-When-Uitextfield-Becomes-First-Responder

基本上,iOS 有一个内置的滚动器,如果文本字段不在屏幕上,它也会为您滚动(通常文本字段的中心不在屏幕上,如果它被键盘,它仍然被认为在屏幕上)。所以我调用了我的函数,做了滚动,然后 iOS 做了他的滚动,把我搞砸了。所以你需要禁用 iOS 的内置滚动。

于 2013-07-05T08:04:04.877 回答