我在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; }
有人可以告诉我可能会出错吗?任何见解都会有所帮助
谢谢
我怀疑发生的事情是桌面视图是橡皮筋,就像Safari中的webview一样,当你运行它的边界时.最可能的原因是,当您弹出键盘时,它位于表视图的顶部,但表视图没有物理收缩,因此所有UITableViewCell都适合部分遮挡的UITableView,当其中一些滚动时它是橡皮筋所以它们都在其中.
为了测试这一点,请尝试减小列表视图的大小,以便在显示键盘时可以看到整个内容,如果错误消失,您需要编写动态更改大小的代码,因为键盘会进出动画.