Cocoa touch -[UITableView ScrollToRowatineXpath:]滚动,但返回第一行

Cocoa touch -[UITableView ScrollToRowatineXpath:]滚动,但返回第一行,cocoa-touch,Cocoa Touch,我有一个分组的表格视图,表格视图中有文本字段。为了使键盘不隐藏文本字段,在textFieldShouldBeginEditing中,我调用了scrollToRowAtIndexPath方法,并将正在编辑的行的滚动位置设置到tableview的顶部 滚动确实会发生,但一旦键盘出现(即一旦textFieldShouldBeginEditing返回YES),表格就会滚动回其原始位置,并在顶部显示第一部分的第一行。在调用ScrollToRowatineXpath后,我不会调用reloadTable 该问

我有一个分组的表格视图,表格视图中有文本字段。为了使键盘不隐藏文本字段,在textFieldShouldBeginEditing中,我调用了scrollToRowAtIndexPath方法,并将正在编辑的行的滚动位置设置到tableview的顶部

滚动确实会发生,但一旦键盘出现(即一旦textFieldShouldBeginEditing返回YES),表格就会滚动回其原始位置,并在顶部显示第一部分的第一行。在调用ScrollToRowatineXpath后,我不会调用reloadTable

该问题仅在第4行和第5行(bdate和zip)出现。password2按预期工作

这是我用来滚动到特定行的代码

if(textField == password2){
    indPath = [NSIndexPath indexPathForRow:3 inSection:0];
    [self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    return YES;
}
else if(textField == bdate){
    indPath = [NSIndexPath indexPathForRow:4 inSection:0];
    [self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    return YES;
}
else if(textField == zip){
    indPath = [NSIndexPath indexPathForRow:5 inSection:0];
    [self.tableView scrollToRowAtIndexPath:indPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    return YES;
}
有人能告诉我出了什么问题吗?任何见解都会有所帮助


谢谢

我怀疑发生的事情是表视图被橡皮筋绑回了,就像Safari中的webview在运行时通过边界一样。最可能的原因是,当您弹出键盘时,它位于表视图的顶部,但表视图没有实际收缩,因此所有UITableViewCell都适合部分遮挡的UITableView,并且当其中一些单元格滚动到橡皮筋之外时,它们都在其中


为了测试这一点,请尝试减小列表视图的大小,以便在显示键盘时可以看到全部内容,如果错误消失,您需要编写代码,在键盘进出动画时动态更改大小。

Hi。在我指定的代码中,password2位于bdate和zip字段之上,zip之后有更多的单元格。zip是第一次显示视图时可见的最后一个单元格。这可能是其他视图尚未绘制的原因,导致表反弹吗?如果不是,那么为什么不把它向上移动呢?这与尚未绘制视图无关。问题是tableview比您在屏幕上显示的要大。仅仅因为它的一部分被键盘遮挡,并不意味着它不在那里,视图根据它的大小进行反弹。虽然效果很好,但存在一个小问题,在键盘通知之前调用textfieldshouldbegin。因此,如果您先调用较低的文本字段,它会尝试向上滚动,但如果整个tableview已可见,则不会向上滚动,然后键盘会显示调整tableview的大小。您解决过这个问题吗?你是如何实现路易斯的答案的?
//For iOS 7 
        [self.TableView reloadData];
        NSIndexPath *indexPat = [NSIndexPath indexPathForRow:1 inSection:1];
        [self.TableView scrollToRowAtIndexPath:indexPat atScrollPosition:UITableViewScrollPositionTop animated:YES];