Bug in UITableView ( deleteSections:withRowAnimati

2019-02-09 06:19发布

问题:

I have problems using this UITableView method:

- (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

First the documentation says:

animation: YES to animate the deletion of sections, otherwise NO.

But the parameter animation is actually of type enum UITableViewRowAnimation, not BOOL!?

So how can I disable the animation? I've tried NO and UITableViewRowAnimationNone. Nothing works. The section deletion is always animated.

I know that I can use [tableView reloadData] instead. That would solve my issue. I'm just curious if that is a known problem and if it is possible to disable animation with this tableview method.

Thanks!

回答1:

About the YES/NO in the doc whereas the parameter is of type UITableViewRowAnimation, I guess this is a rest from an old version of the API where the parameter was a BOOL before. Anyway, the documentation is indeed wrong.

Don't hesitate to send a feedback to Apple for this (using the "It's good but…" link at the bottom of the doc)



回答2:

It's kind of a hack but this gets rid of the insert animation:

[UIView setAnimationsEnabled:NO];
[self.tableView insertRowsAtIndexPaths:insertedIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[UIView setAnimationsEnabled:YES];


回答3:

Well, obviously the documentation is indeed buggy. The parameter you pass says how you animate the deletion. If you pass UITableViewRowAnimationNone, the update happens instantly without animation. However, when you have a section below the one you delete, it will move upwards in an animated way.

You should try to make use of the animations. This way a user can see what happens.



回答4:

I believe you need to embed the deleteSections call inside a beginUpdates block:

[tableView beginUpdates];
[tableView deleteSections:... withRowAnimation:... ];
[tableView endUpdates];

The documentation seems to say this anyway. I haven't tested this with UITableRowViewAnimationNone though.