I have a UITableView with cells containing variable-height UILabels. I am able to calculate the minimum height the label needs to be using sizeWithFont:constrainedToSize:l
To improve slightly on the answer above from @David and to answer the last comment about how to animate it smoothly during a rotation, use this method:
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
and of course the height delegate method:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
return 171.0f;
} else {
return 128.0f;
}
}
Your UITableViewController can implement the tableView:heightForRowAtIndexPath:
method to specify the row height for a particular row, and it can look at the current orientation ([[UIDevice currentDevice] orientation]
) to decide what height to return.
To make sure tableView:heightForRowAtIndexPath:
gets called again when the orientation changes, you'll probably need to
detect the orientation change as described in this question, and call [tableView reloadData]
.