我有一个带有UITableView的iPad应用程序,大约有100行。单元格是自定义的,我已经实现了heightForRowAtIndexPath来告诉UITableView我的单元格有多大。
我正在使用它:
[tableView scrollToRowAtIndexPath:indexPath
atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
将表格滚动到给定的行。这适用于第1-75行。行76略微偏离中间,76-79略微偏离,并且从行80开始,它根本不再滚动到正确的位置。它只是保持第79行是最后一行。当发生这种情况时,我仍然可以通过拖动手指来手动滚动表格。它显然还没有结束。然而,似乎以编程方式,scrollToRowAtIndexPath 认为它已经到达表的末尾才真正具有。我希望这个行为在表的末尾,而不是3/4的行。
我正在努力调试这里发生的事情;我很感激任何指针,帮助我找出为什么当我调用scrollToRowAtIndexPath时表格认为它已经结束了。
答案 0 :(得分:3)
我有同样的问题,我想我明白会发生什么:表视图已经执行了另一个动画,并且忽略了scrollToRowAtIndexPath。在CATransaction块中包装该方法对我来说很有用(快速代码):
CATransaction.begin()
tableView.beginUpdates()
tableView.scrollToRowAtIndexPath(cell.indexPath, atScrollPosition: .Middle, animated: true)
tableView.endUpdates()
CATransaction.commit()
另一个对我有用的解决方案是使用performSelectorWithDelay,延迟时间足以让表视图上的其他动画完成。
答案 1 :(得分:2)
我注意到这个问题被观看了很多,所以可能有更多的人遇到这个问题。最终我发现这不是tableview的问题。它位于视图中,在旋转设备或从代码调整大小时行为不正常。 tableview实际上扩展到了它所在视图的边界之外,因此输出看起来很奇怪但是如果你认为tableview超出了屏幕的边界,它实际上是有意义的。
我通过清理视图层次结构并确保调整大小和旋转正常工作来解决它。
答案 2 :(得分:1)
尝试:
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexRow inSection:indexSection]
atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
答案 3 :(得分:-1)
你写道你已经覆盖了heightForRowAtIndexPath:,但没有什么可以覆盖的。你应该有一个实现UITableViewDelegate协议的委托,由tableView调用。
如果已经是这种情况,你应该通过记录heightForRowAtIndexPath中的值来检查你的委托是否正常工作,或者在那里打破。