我正在尝试以编程方式滚动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行视图,同时基于在上面的代码中,最后一页的顶部索引路径应为51!
有人可以帮我解决这个问题。感谢。
这是手动滚动图片:
这是以编程方式完成的:
答案 0 :(得分:1)
如果屏幕上有17行,则无法滚动,因此显示的项目少于17个。因此,表视图将使您请求的行位于顶部并滚动到最近的行,这意味着视图是“完整”的行。基本上是因为60不能(完全)被17整除,所以表视图不会让你只显示半页'。
或者,您可以尝试使用基于顶部(setContentOffset:animated:
)所需单元格框架的滚动视图方法rectForRowAtIndexPath:
。
答案 1 :(得分: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了。