scrollToRowAtIndexPath在3/4行之后不滚动到正确的行

时间:2010-10-04 14:53:47

标签: iphone objective-c cocoa-touch ipad uitableview

我有一个带有UITableView的iPad应用程序,大约有100行。单元格是自定义的,我已经实现了heightForRowAtIndexPath来告诉UITableView我的单元格有多大。

我正在使用它:

   [tableView scrollToRowAtIndexPath:indexPath 
              atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

将表格滚动到给定的行。这适用于第1-75行。行76略微偏离中间,76-79略微偏离,并且从行80开始,它根本不再滚动到正确的位置。它只是保持第79行是最后一行。当发生这种情况时,我仍然可以通过拖动手指来手动滚动表格。它显然还没有结束。然而,似乎以编程方式,scrollToRowAtIndexPath 认为它已经到达表的末尾才真正具有。我希望这个行为在表的末尾,而不是3/4的行。

我正在努力调试这里发生的事情;我很感激任何指针,帮助我找出为什么当我调用scrollToRowAtIndexPath时表格认为它已经结束了。

4 个答案:

答案 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中的值来检查你的委托是否正常工作,或者在那里打破。