Altura padrão para o cabeçalho da seção no UITableView


125

Quero definir a altura do primeiro cabeçalho no meu UITableView. Para os outros cabeçalhos, quero que eles permaneçam na altura padrão. Que valor / constante posso colocar no lugar de "someDefaultHeight" no código abaixo?

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

    return someDefaultHeight;
}

obrigado


Por que você não tenta valores diferentes até obter uma satisfação?
297 Daniel

4
@ Daniel - se a Apple decidir alterar o valor padrão da altura da linha, preciso garantir que meu aplicativo não codifique esse valor (para um valor arbitrário). É melhor extrair essas informações de uma constante se elas forem declaradas em algum lugar.
297 rédea

Respostas:


204

No IOS 5.0 em diante, você pode retornar UITableViewAutomaticDimension na maioria dos métodos de delegação. Está na parte inferior da página de documentação

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

1
hmm .. Quanto a mim UITableViewAutomaticDimensionretorna -1(const codificado) e não vejo nenhuma seção na minha UITableView.
skywinder

por que UITableViewAutomaticDimensionmostra -1 quando NSLog?
S1U

30
Isso só funciona quando você usa: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionse você estiver implementando o - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionmétodo, isso não funcionará.
SuperSaiyen

2
Vale a pena notar, se você implementar isso e o método delegar estimativa e retornar, UITableViewAutomaticDimensionele terá uma altura zero.
Sam Soffes

4
@SuperSaiyen - Ele faz o trabalho com viewForHeaderInSectionvocê só precisa setestimatedSectionHeaderHeight
Robert

48

Ao verificar os padrões no meu aplicativo, parece que para uma tabela agrupada o padrão é uma altura de 22 e para uma tabela não agrupada, o padrão é uma altura de 10.

Se você verificar o valor da propriedade sectionHeaderHeight na sua tableview, isso deve lhe indicar.


1
Obrigado ... Vou codificá-lo para isso. Embora eu desejasse que houvesse uma constante para esse valor.
297 rédea

3
Você tem isso ao contrário. UITableViewStyleGroupedtem 22 anos e UITableViewStylePlain10 anos.
Michael Grinich

25

Realmente faça o truque :)

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

2
Eu acho que você quis dizer return [self.tableView sectionHeaderHeight];, ou melhor ainda return [tableView sectionHeaderHeight];,. No entanto, ambos retornam -1 para mim, talvez porque não estou usando uma ponta ou storyboard.
Jk7

7

Por uma questão de integridade: no iOS7 +, a altura dos cabeçalhos de seção de estilo agrupado é 55.5para o primeiro e 38para os cabeçalhos seguintes. (medido com DCIntrospect)


4

Para o swift 4.2, você deve retornar UITableView.automaticDimension


2

Não sei ao certo qual é a resposta correta, mas nem 10 nem 22 parecem ser a altura correta para uma exibição de tabela agrupada no iOS 5. Estou usando 44, com base nessa pergunta, e pelo menos parece aproximadamente a altura correta.


2

Para obter a altura padrão, basta supermanipulá-la:

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

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

[super tableView:tableView heightForHeaderInSection:section];retorna 0 para mim, talvez porque não estou usando uma ponta ou storyboard.
Jk7

1
Isso só funciona se você estiver subclassificando UITableViewController.
Wallace

-1

Isso deve fazer o truque

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

Eu acho que você quer dizerreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];produz um erro. Você quis dizer [tableView sectionHeaderHeight];?
Jk7
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.