For many who use UITableView, unless you’re doing something like a Contacts application, the tableHeaderView (and related, tableFooterView) are rarely used.
What’s even more perplexing (at least when at first experienced), is that these elements are not repainted when a [UITableView reloadData] is issued; you have to manually issue field / image resets yourself.
Sometimes – like when handling a variable amount of data in the header, say for user status messages – you even have to adjust the size of the tableHeaderView in order to accomodate a growing / shrinking amount of real estate.
Here’s the trick:
CGRect headerFrame = self.profile.tableHeaderView.frame;
headerFrame.size.height = self.myStatus.frame.size.height + offset;
self.header.frame = headerFrame;
self.profile.tableHeaderView = self.header;
First, grab the current header frame. Then, adjust the size of the frame (in my example, I’m adjusting the height only). Then, reset the tableHeaderView with the view again.
This is important – the size will not be adjusted until the tableHeaderView (or tableFooterView) variable is reset.
Hope this helps some of you struggling with this not-so-well documented problem.