Default height for section header in UITableView
IphoneCocoa TouchUitableviewIphone Problem Overview
I want to set the height of the first header in my UITableView. For the other headers I want them to remain the default height. What value/constant can I put in place of "someDefaultHeight" in the code below?
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return kFirstHeaderHeight;
return someDefaultHeight;
}
Thanks
Iphone Solutions
Solution 1 - Iphone
In IOS 5.0 onwards you can return UITableViewAutomaticDimension in most of the delegate methods. Its at the bottom of the documentation page
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if(section == CUSTOM_SECTION)
{
return CUSTOM_VALUE;
}
return UITableViewAutomaticDimension;
}
Solution 2 - Iphone
From checking the defaults in my app it looks like for a grouped table the default is a height of 22 and for a non-grouped table the default is a height of 10.
If you check the value of the property sectionHeaderHeight on your tableview that should tell you.
Solution 3 - Iphone
Actually do the trick :)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if(section == 0)
return kFirstSectionHeaderHeight;
return [self sectionHeaderHeight];
}
Solution 4 - Iphone
For the sake of completeness: in iOS7+ the height for grouped style section headers is 55.5
for the first and 38
for following headers.
(measured with DCIntrospect)
Solution 5 - Iphone
For swift 4.2 you should return UITableView.automaticDimension
Solution 6 - Iphone
I'm not sure what the correct answer is here, but neither 10 or 22 appears to be the correct height for a grouped table view in iOS 5. I'm using 44, based on this question, and it at least appears to roughly the correct height.
Solution 7 - Iphone
To get the default height, just let super
handle it:
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return kFirstHeaderHeight;
return [super tableView:tableView heightForHeaderInSection:section];
}
Solution 8 - Iphone
This should do the trick
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section == CUSTOM_SECTION)
{
return CUSTOM_VALUE;
}
return [tableView rowHeight];
}