views:

387

answers:

1

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.

+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
Yeah, this is what I'd do.
Ben Gottlieb
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
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
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