0

我正在尝试以编程方式滚动 tableview,如下所示。请注意,我增加了内容大小,所以我可以看到最后几行。我可以手动正确滚动以在顶部获取所需的索引路径,但以编程方式它没有发生。

[tableview reloadData];

CGSize size = tableview.contentSize;
size.height += 1000;
tableview.contentSize = size;

int rows = [tableview numberOfRowsInSection:0];
int numberofRowsInView = 17;
for (int i = 0; i < ceil((float)rows/numberofRowsInView); i++) {
    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
    ....
}

对于总共 60 行,我希望此代码返回 0-16、17-33、34-50、51-59 的单元格视图,但对于最后一次滚动,它返回 43-59 即完整的 17 行视图,同时基于上述代码,最后一页的 top indexpath 应该是 51 !

有人可以帮我解决这个问题。谢谢。

这是手动滚动图像:

手动滚动

这是以编程方式完成的:

以编程方式滚动

4

2 回答 2

1

如果屏幕上适合 17 行,则无法滚动以显示少于 17 个项目。因此,表格视图将采用您要求位于顶部的行并滚动到最近的行,这意味着视图“已满”行。基本上这是因为 60 不能(完全)被 17 整除,所以表格视图不会让你只显示半个“页面”。


或者,您可以尝试使用setContentOffset:animated:基于您想要在顶部的单元格框架的滚动视图方法 ( rectForRowAtIndexPath:)。

于 2013-07-21T17:04:11.050 回答
0

看来我不会让这个工作。我只需要最后一页单元格的一小部分时间,然后我重置回原始的 tableview 框架。

int rows = [tableview numberOfRowsInSection:0];
int numberofRowsInView = 17;

for (int i = 0; i < ceil((float)rows/numberofRowsInView); i++) {
    NSUInteger remainingCells = rows - i*numberofRowsInView;
    if(remainingCells < numberofRowsInView) {
        CGRect frame = tableview.frame;
        frame.size.height = remainingCells * tableview.rowHeight;
        tableview.frame = frame;
    }

    [tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i * numberofRowsInView inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];
     ......

  }

现在它在最后一页上准确地显示了剩余的单元格!我不再需要设置 contentSize 了。

于 2013-07-21T18:24:58.993 回答