- [UITableView scrollToRowAtIndexPath:]滚动,但返回第1行

los*_*sit 4 cocoa-touch

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

滚动确实发生了,但是一旦键盘出现(即一旦textFieldShouldBeginEditing返回YES),表就会滚动回原来的位置并在顶部显示第一部分的第一行.在调用scrollToRowAtIndexPath之后,我没有调用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;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我可能会出错吗?任何见解都会有所帮助

谢谢

Lou*_*arg 5

我怀疑发生的事情是桌面视图是橡皮筋,就像Safari中的webview一样,当你运行它的边界时.最可能的原因是,当您弹出键盘时,它位于表视图的顶部,但表视图没有物理收缩,因此所有UITableViewCell都适合部分遮挡的UITableView,当其中一些滚动时它是橡皮筋所以它们都在其中.

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