Insert UITableView row without ANY animation

2020-06-01 06:45发布

问题:

[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:0]] 
                      withRowAnimation:UITableViewRowAnimationNone];

When doing this every row after the one I'm inserting slides down. I want them to immediately jump to their new place. I don't want to call reloadData since then all my cells would be redrawn.

Is it possible to remove this animation?

回答1:

This works for me:

[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];

[self.tableView insertRowsAtIndexPaths:indexPath
                      withRowAnimation:UITableViewRowAnimationNone];

[self.tableView endUpdates];
[UIView setAnimationsEnabled:YES];

Hope this helps.



回答2:

This also works

[UIView performWithoutAnimation:^{
    [self.tableView insertRowsAtIndexPaths:indexPaths:withRowAnimation:UITableViewRowAnimationNone];
});


回答3:

Unfortunately, I ran into this same issue and there was no way for me to remove the animation.

Must be a bug with the UITableViewRowAnimationNone animation type since iOS (of any version) does not seem to respect it.



回答4:

Swift example (from my chat)

UIView.performWithoutAnimation {
        messagesTable.insertRows(at: [IndexPath(row: messages.count - 1, section: 0)], with: .none)
    }


回答5:

If you update the UITableView's dataSource and call [tableView reloadData] instead of manually inserting the row, the table will refresh without any animation.