iPhone UITableView无需滚动即可在顶部添加内容

Ale*_*one 10 iphone objective-c uitableview uiscrollview ios5

我在UITableView中有一个可能非常长的消息滚动日志用户可以通过滚动来导航表.

我要做的是在表格的顶部添加新内容.如果表的顶部可见,则新行将推送其余内容.但是如果表的第一行不可见,则表将静默地在顶部添加另一行而不滚动.

我这样做是为了防止表格滚动到顶部中断用户浏览数据.如果我要求表格只是滚动到新的插入点,那么用户在表格中的位置将会丢失,从而使用户感到沮丧.

我可以尝试实现这一点的方法之一是将数据插入索引为0的NSMutableArray.这有用吗?一个额外的问题:在NSMutableArray的开头插入数据有多昂贵.我希望这样的操作得到优化,但我想确保.这个实现我错过了什么?

谢谢!

Tim*_*Tim 13

如何在不碰撞视图的情况下插入:

  • 使用tableView's(UIScrollView)contentOffset值查找用户当前滚动到的位置.
  • 在顶部添加新行 animated:NO
  • 更新tableViewcontentOffset是当用户在加上无论你行的高度.

如何避免在用户拖动时导致执行此操作的问题:

  • 跟踪用户拖动的时间,如果要在拖动/运动期间插入行,请将它们添加到用户发布后执行的队列中.


nah*_*ada 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;
Run Code Online (Sandbox Code Playgroud)