Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone ScrollToRowatineXpath在3/4行之后未滚动到正确的行_Iphone_Objective C_Cocoa Touch_Ipad_Uitableview - Fatal编程技术网

Iphone ScrollToRowatineXpath在3/4行之后未滚动到正确的行

Iphone ScrollToRowatineXpath在3/4行之后未滚动到正确的行,iphone,objective-c,cocoa-touch,ipad,uitableview,Iphone,Objective C,Cocoa Touch,Ipad,Uitableview,我有一个iPad应用程序,它有一个大约100行的UITableView。单元格是自定义的,我已经实现了HeightForRowatineXpath来告诉UITableView我的单元格有多大 我用这个: [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; 将表格滚动到给定行。这非常适用于第1-75行

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

我用这个:

   [tableView scrollToRowAtIndexPath:indexPath 
              atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
将表格滚动到给定行。这非常适用于第1-75行。第76行稍微偏离中间位置,第76-79行稍微偏离中间位置,从第80行开始,它不再滚动到正确的位置。它只是保持不变,第79行是最后一行。发生这种情况时,我仍然可以通过拖动手指手动滚动表格;显然还没有结束。然而,从编程的角度来看,ScrollToRowatineXpath认为它在实际到达表的末尾之前就已经到达了表的末尾。我希望这种行为出现在表的末尾,而不是3/4行


我正在努力调试这里发生的事情;当我调用ScrollToRowatineXpath时,如果有任何指针能帮助我找出为什么表认为它已经到了末尾,我将不胜感激。

您写道您已经覆盖了RowatineXpath:的高度,但没有什么可以覆盖的。您应该有一个实现UITableViewDelegate协议的委托,该委托将由tableView调用


如果已经是这种情况,您应该通过在heightForRowAtIndexPath中记录调用的heightForRowAtIndexPath中的值来检查您的代理是否正常工作,或者在那里打断一下。

我注意到这个问题被广泛关注,因此可能会有更多的人遇到这个问题。最终我发现这不是tableview的问题。当旋转设备或根据代码调整其大小时,它被放置在一个行为不正常的视图中。TabLVIEW实际上超出了它所处的视图的边界,所以输出看起来很奇怪,但是如果您认为TabLVIEW结束超出屏幕的边界,它实际上是有意义的。 我通过清理视图层次结构并确保调整大小和旋转正常工作来解决这个问题

试试看:

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexRow inSection:indexSection] 
                 atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

我也遇到了同样的问题,我想我知道会发生什么:表视图已经在执行另一个动画,而ScrollToRowatineXpath被忽略。将方法包装在CATTransaction块中对我有效(swift代码):


另一个对我有效的解决方案是使用PerformSelector with delay,延迟的时间足以让表视图上的其他动画完成。

是的,对不起,这就是我的意思;调用了height函数,值是正确的(我也可以从单元格中看出这一点;它们都已正确渲染)。更新:问题似乎是tableview所属的视图自身大小调整不正确。它被设置为自动调整大小,但它继续使用nib文件中的大小(此视图是最上面的视图)。因为它比添加到的视图大,所以表的末尾位于视图边界之外。知道了这一点,找到解决方案可能会更容易,但我一直找不到。我已经找了一整天的解决方案。我的问题是,系统计算最后一个单元格时只差一点点。这就是成功的原因!非常感谢!谢谢你,先生!这对我来说很有效,而且确实是由于在我尝试.ScrollToRow的同时发生了.reloadSections动画造成的。这有助于解决可变单元格高度的滚动问题。
CATransaction.begin()

tableView.beginUpdates()
tableView.scrollToRowAtIndexPath(cell.indexPath, atScrollPosition: .Middle, animated: true)
tableView.endUpdates()

CATransaction.commit()