UITableView scrollToRowAtIndexPath不适用于最后4

use*_*064 10 cocoa-touch objective-c scrollto uitableview ios

我在UITableViewController中,我在单元格内部有文本字段.当用户点击文本字段时,我实现了UITextFieldDelegate,并在方法textFieldDidBeganEditing中确定了单元格的索引并滚动到该位置.它适用于所有预期最后4-5个细胞的细胞.我究竟做错了什么?谢谢.

Emp*_*ack 35

scrollToRowAtIndexPath:方法仅在tableView的contentSize足够大以将单元格置于这些位置时将单元格滚动到UITableViewScrollPositionTopUITableViewScrollPositionMiddle.如果您尝试滚动到顶部或中间的单元格是最后一个单元格或最后几个单元格,则无法滚动到中间或顶部.在这些情况下,您需要手动为这些单元格计算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];
Run Code Online (Sandbox Code Playgroud)