Default height for section header in UITableView

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

82839 次浏览

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.

This should do the trick

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section == CUSTOM_SECTION)
{
return CUSTOM_VALUE;
}
return [tableView rowHeight];
}

Actually do the trick :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if(section == 0)
return kFirstSectionHeaderHeight;
return [self sectionHeaderHeight];
}

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.

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;
}

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)

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];
}

For swift 4.2 you should return UITableView.automaticDimension