我在 UITableViewController 中,单元格内有文本字段。当用户单击文本字段时,我实现 UITextFieldDelegate 并在方法 textFieldDidBeganEditing 中确定单元格的索引并滚动到该位置。它适用于除最后 4-5 个细胞之外的所有细胞。我究竟做错了什么?谢谢。
最佳答案
scrollToRowAtIndexPath: 方法将单元格滚动到 UITableViewScrollPositionTop 或 UITableViewScrollPositionMiddle 仅当 tableView 的 contentSize 足够大时把细胞带到那些位置。如果您尝试滚动到顶部或中间的单元格是最后一个单元格或在最后几个单元格中,则无法滚动到中间或顶部。在这些情况下,您需要为这些单元格手动计算 contentOffset。
编辑 - 计算 contentOffset:
为了计算contentOffset,请使用@Schoob 指定的方法。将以下代码放入您的 textFieldDidBeginEditing 方法中。
CGPoint origin = textField.frame.origin;
CGPoint point = [textField.superview convertPoint:origin toView:self.tableView];
float navBarHeight = self.navigationController.navigationBar.frame.size.height;
CGPoint offset = tableView.contentOffset;
// Adjust the below value as you need
offset.y += (point.y - navBarHeight);
[tableView setContentOffset:o animated:YES];
关于objective-c - UITableView scrollToRowAtIndexPath 不适用于最后 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354172/