UITableView中节标题的默认高度


125

我想在UITableView中设置第一个标题的高度。对于其他标题,我希望它们保持默认高度。我可以在下面的代码中代替“ someDefaultHeight”什么值/常数?

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return someDefaultHeight;
}

谢谢


为什么不尝试不同的值,直到获得满意的结果?
丹尼尔(Daniel)2009年

4
@Daniel-如果Apple曾经决定更改默认的行高值,那么我需要确保我的应用程序不会对此值进行硬编码(达到任意值)。如果在某处声明了此信息,则最好将其从常量中提取出来。
缰绳

Answers:


204

从IOS 5.0开始,您可以在大多数委托方法中返回UITableViewAutomaticDimension。它在文档页面的底部

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}

1
嗯。至于我UITableViewAutomaticDimension返回-1(硬编码的const),我根本看不到任何部分UITableView
skywinder

为什么在UITableViewAutomaticDimension显示-1时显示NSLog
2013年

30
这仅在您使用以下区域时才有效:- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section如果要实现该- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section方法,则此方法将无效。
SuperSaiyen

2
值得注意的是,如果您实现此方法和估计委托方法并返回,则该方法的UITableViewAutomaticDimension高度为零。
山姆·索菲斯

4
@SuperSaiyen-它与viewForHeaderInSection您一起使用只需要设置estimatedSectionHeaderHeight
罗伯特·罗伯特(Robert Robert)

48

通过检查我的应用程序中的默认设置,看起来分组表的默认高度为22,非分组表的默认高度为10。

如果您在应该告诉您的表视图上检查属性sectionHeaderHeight的值。


1
谢谢...我将对此进行硬编码。尽管我确实希望此值有一个常数。
缰绳

3
你有这些倒退。UITableViewStyleGrouped是22和UITableViewStylePlain10。
迈克尔Grinich

25

实际做到了:)

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

2
我想你的意思是return [self.tableView sectionHeaderHeight];,或者更好return [tableView sectionHeaderHeight];。但是,两者都为我返回-1,这可能是因为我没有使用笔尖或情节提要。
jk7

7

为了完整起见:在iOS7 +中,分组样式部分标题的高度是55.5第一个38标题和后面的标题的高度。(以DCIntrospect测量)


4

对于Swift 4.2,您应该返回UITableView.automaticDimension


2

我不确定这里的正确答案是什么,但是10或22似乎都不是iOS 5中分组表格视图的正确高度。基于这个问题,我使用的是44 ,并且至少看起来大概是正确的高度。


2

要获取默认高度,只需super处理一下即可:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0)
        return kFirstHeaderHeight;

    return [super tableView:tableView heightForHeaderInSection:section];
}

[super tableView:tableView heightForHeaderInSection:section];为我返回0,也许是因为我没有使用笔尖或情节提要。
jk7 '16

1
仅在子类化UITableViewController时才有效。
华莱士

-1

这应该可以解决问题

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

我认为您的意思是return [self sectionHeaderHeight];
-TMB

@TMB [self sectionHeaderHeight];产生错误。你是说[tableView sectionHeaderHeight];
jk7,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.