UITableView scrollToRowAtIndexPath不适用于最后4个

问题描述

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

解决方法

        scrollToRowAtIndexPath:方法仅在tableView的contentSize足够大以将单元格移到那些位置时,才将单元格滚动到UITableViewScrollPositionTop或UITableViewScrollPositionMiddle。如果您要滚动到顶部或中间的单元格是最后一个单元格或最后几个单元格,则不能滚动到中间或顶部。在这些情况下,您需要为这些单元格手动计算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];
    ,        我发现使用scrollToRowAtIndexPath的关键是确保在显示视图后调用此函数。即推送到导航控制器或以模态显示。 我的工作代码是这样的 呼叫码
MyViewController *cont = [[MyViewController alloc] initWithMedication:medication];
cont.sectionToShow = 1;
[self.navigationController pushViewController:cont animated:YES];

[cont release];
viewWillAppear中的ViewController代码
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:self.sectionToShow];
[cont.tableview scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
如果我以其他方式进行操作,那么在某些情况下总是无法正常工作。我想我们想在演示周期的后半段滚动。     ,        这是尝试确定添加在UITableViewCell上的视图/文本字段的indexPath时应使用的方法
CGPoint point = [textField.superview convertPoint:textField.frame.origin toView:self.tableView];
然后用点
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...