我在UITableView中有一个可能非常长的消息滚动日志用户可以通过滚动来导航表。
我要做的是在表格的顶部添加新内容。如果表格的顶部是可见,则新行会将其余内容向下推送。但如果表格的第一行不可见,则表格会静默添加另一行而不滚动。
我这样做是为了阻止表格滚动到顶部来中断用户浏览数据。如果我要求表格只是滚动到新的插入点,那么用户在表格中的位置就会丢失,这会让用户感到沮丧。
我可以尝试实现这一点的方法之一是将数据插入索引为0的NSMutableArray。这会有用吗?一个额外的问题:在NSMutableArray开头插入数据有多昂贵。我希望这样的操作得到优化,但我想确保。我对此实现缺少什么?
谢谢!
答案 0 :(得分:13)
如何插入而不会碰到视图:
tableView
的{{1}})UIScrollView
值来查找用户当前滚动到的位置。contentOffset
animated:NO
的{{1}}更新为用户所在的位置加上行的高度。如何避免在用户拖动时导致执行此操作的问题:
答案 1 :(得分:6)
CGSize beforeContentSize = self.tableView.contentSize;
[self.tableView reloadData];
CGSize afterContentSize = self.tableView.contentSize;
CGPoint afterContentOffset = self.tableView.contentOffset;
CGPoint newContentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);
self.tableView.contentOffset = newContentOffset;
答案 2 :(得分:2)
刚刚在这里发布了代码片段的答案
Keep uitableview static when inserting rows at the top
基本上: