How do I tell my UITableViewCell to "auto-resize" when its content changes?
There is a documented way to do this. See UITableView.beginUpdates()
documentation:
You can also use this method followed by the endUpdates method to animate the change in the row heights without reloading the cell.
So, the correct solution is:
tableView.beginUpdates()tableView.endUpdates()
Also note that there is a feature that is not documented - you can add a completion handler for the update animation here, too:
tableView.beginUpdates()CATransaction.setCompletionBlock { // this will be called when the update animation ends}tableView.endUpdates()
However, tread lightly, it's not documented (but it works because UITableView
uses a CATransaction
for the animation).
I think the simplest solution is to reload that specific cell. For example:
- (void)yourDelegateMethodOfCell:(UITableViewCell *)cell { NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; //If cell is not visible then indexPath will be nil so, if (indexPath) { [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; }}