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:lineBreakMode:
, which works fine when the table view is first loaded. When I rotate the table view the cells become wider (meaning there are fewer lines required to display the content). Is there any way I can have the height of the cells redetermined by the UITableView during the orientation change animation or immediately before or after? Thank you.
views:
387answers:
1
+3
A:
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]
.
David Gelhar
2010-04-27 02:01:50
Yeah, this is what I'd do.
Ben Gottlieb
2010-04-27 03:31:48
I currently have `tableView:heightForRowAtIndexPath:` implemented, I didn't see it getting called on orientation change but it does get called on `reloadData` and I can detect the orientation change. If possible I'd like to have the height animate as the view rotates, but I'm not seeing that as a possibility.
Peter Zich
2010-04-27 04:20:36
According to this question: http://stackoverflow.com/questions/460014/can-you-animate-a-height-change-on-a-uitableviewcell-when-selected you might be able to do the animation by using `beginUpdates`/`endUpdates` instead of `reloadData`
David Gelhar
2010-04-27 11:17:30
That works perfectly, David, thank you. I put this code in `-didRotateFromInterfaceOrientation` and it works great. Right now it rotates and then resizes. I'm going to look for a better method to put this in and see if I can get it to resize as it rotates.
Peter Zich
2010-05-05 23:54:24