如何解决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];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。