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

rédea
fonte
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;
}
Ajaxharg
fonte
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.

paulthenerd
fonte
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];
}
BadPirate
fonte
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)

ronhippler
fonte
4

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

Muvimotv
fonte
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.

Jason George
fonte
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];
}
Hendrik
fonte
[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];
}
Yogesh D
fonte
Eu acho que você quer dizerreturn [self sectionHeaderHeight];
TMB
@TMB [self sectionHeaderHeight];produz um erro. Você quis dizer [tableView sectionHeaderHeight];?
Jk7