【发布时间】:2011-10-24 16:12:46
【问题描述】:
我有一张桌子,我正在为它做一些特殊的加载。用户开始滚动到底部。当用户在顶部附近滚动时,我通过滚动视图委托方法检测到这一点,然后我快速加载一些额外的内容,并填充列表顶部的更多内容。我希望它看起来无缝,就像向上的“无限滚动”。为此,我必须设置内容偏移量,以便用户不会看到表格向上“跳跃”。当我慢慢滚动时,这非常有效。当我快速滚动以使表格减速时,我设置的内容偏移量将被忽略。这是我正在使用的代码:
CGFloat oldHeight = self.tableView.contentSize.height;
CGFloat oldOffset = self.tableView.contentOffset.y;
self.tableContentsArray = newTableContentsArray;
[self.tableView reloadData];
CGFloat newHeight = self.tableView.contentSize.height;
CGFloat newOffset = oldOffset + (newHeight - oldHeight);
self.tableView.contentOffset = CGPointMake(0, newOffset);
因此,如果我使用 100 像素高的表格快速向上滚动并在减速时到达顶部,我会加载更多数据,获得一个新的表格高度,例如 250 像素。我将偏移量设置为 150。但是,由于它仍在减速,Apple 代码将偏移量设置为 150 0.1 秒或其他时间,然后转到下一个计算的减速偏移量,并将偏移量设置为 0,这使得它在用户看来,他们只是跳过了 150 像素的内容,现在位于列表的新顶部。
现在我希望保持列表中的加速度,这样它会继续上升一段时间,然后减速,并最终达到大约 120 像素的偏移量,就像您所期望的那样。问题是,怎么做?
如果我使用[self.tableView setContentOffset: CGPointMake(0, newOffset) animated: NO];,它会阻止内容偏移被忽略,但会阻止列表失效。
【问题讨论】:
标签: iphone ios uitableview