Default height for section header in UITableView

IphoneCocoa TouchUitableview

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionreinView Question on Stackoverflow
Solution 1 - IphoneAjaxhargView Answer on Stackoverflow
Solution 2 - IphonepaulthenerdView Answer on Stackoverflow
Solution 3 - IphoneBadPirateView Answer on Stackoverflow
Solution 4 - IphoneronhipplerView Answer on Stackoverflow
Solution 5 - IphoneMuvimotvView Answer on Stackoverflow
Solution 6 - IphoneJason GeorgeView Answer on Stackoverflow
Solution 7 - IphoneHendrikView Answer on Stackoverflow
Solution 8 - IphoneYogesh DView Answer on Stackoverflow