插入新行时,TableView会滚动到中间

Jef*_*eff 5 objective-c uitableview uiscrollview ios

我有一个表视图,显示我通过网络获取的消息.

当有新消息进入时,应将其添加到底部的tableview中.

当有新消息进入时,它会正确地添加到tableview的底部,但是tableview会立即滚动到中间.(所以,如果我现在已经说过100个单元格,那么单元格50现在将位于滚动视图的中间).

奇怪的是,只有在插入前的滚动点位于tableview的下半部分时才会发生这种情况.

所以,如果我正在查看99的单元格10,并且我添加了一行,它会被添加到底部就好了.

但是,如果我正在查看99的单元格75,并且我添加了一行,则滚动位置再次跳到中间(〜单元格50).

这是我向tableview添加新消息的代码:

[self.tableView beginUpdates];
[self.messages addObject:message];

NSArray *indexPaths = @[[NSIndexPath indexPathForRow:(self.messages.count - 1) inSection:0]];

[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

为什么tableview会像这样自动滚动?

Hus*_*bir 0

我认为你需要将行动画更改为无-

 [self.tableView 
 insertRowsAtIndexPaths:indexPaths 
 withRowAnimation:
UITableViewRowAnimationNone];
Run Code Online (Sandbox Code Playgroud)