Hauteur par défaut de l'en-tête de section dans UITableView


125

Je veux définir la hauteur du premier en-tête dans mon UITableView. Pour les autres en-têtes, je veux qu'ils restent la hauteur par défaut. Quelle valeur / constante puis-je mettre à la place de "someDefaultHeight" dans le code ci-dessous?

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

    return someDefaultHeight;
}

Merci


pourquoi n'essayez-vous pas différentes valeurs jusqu'à ce que vous en soyez satisfait?
Daniel

4
@Daniel - si Apple décide de changer la valeur de hauteur de ligne par défaut, je dois m'assurer que mon application ne code pas en dur cette valeur (à un montant arbitraire). Il est préférable d'extraire ces informations d'une constante si elles sont déclarées quelque part.
rein

Réponses:


204

Dans IOS 5.0, vous pouvez renvoyer UITableViewAutomaticDimension dans la plupart des méthodes de délégué. C'est au bas de la page de documentation

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

1
hmm .. Quant à moi UITableViewAutomaticDimensionrenvoie -1(const codé en dur) et je ne vois aucune section du tout dans mon UITableView.
skywinder le

pourquoi UITableViewAutomaticDimensionmontre -1 quand NSLogil?
S1U

30
Cela ne fonctionne que lorsque vous utilisez: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionsi vous implémentez la - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionméthode, cela ne fonctionne pas.
SuperSaiyen du

2
Il est à noter que si vous implémentez ceci et la méthode de délégué d'estimation et que vous la renvoyez, UITableViewAutomaticDimensionelle aura une hauteur nulle.
Sam Soffes

4
@SuperSaiyen - Cela fonctionne avec viewForHeaderInSectionvous avez juste besoin de définirestimatedSectionHeaderHeight
Robert

48

Après avoir vérifié les valeurs par défaut dans mon application, il semble que pour une table groupée, la hauteur par défaut est de 22 et pour une table non groupée, la hauteur par défaut est de 10.

Si vous vérifiez la valeur de la propriété sectionHeaderHeight sur votre tableview, cela devrait vous le dire.


1
Merci ... Je vais coder ça en dur. Bien que je souhaite qu'il y ait une constante pour cette valeur.
rein

3
Vous avez ces derniers à l'envers. UITableViewStyleGroupeda 22 ans et UITableViewStylePlain10 ans.
Michael Grinich

25

Faites vraiment l'affaire :)

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

2
Je pense que vous vouliez dire return [self.tableView sectionHeaderHeight];, ou mieux encore, return [tableView sectionHeaderHeight];. Cependant, les deux renvoient -1 pour moi, peut-être parce que je n'utilise pas de plume ou de storyboard.
jk7

7

Par souci d'exhaustivité: dans iOS7 +, la hauteur des en-têtes de section de style groupé est 55.5pour le premier et 38pour les en-têtes suivants. (mesuré avec DCIntrospect)


4

Pour swift 4.2, vous devez retourner UITableView.automaticDimension


2

Je ne sais pas quelle est la bonne réponse ici, mais ni 10 ni 22 ne semblent être la bonne hauteur pour une vue de tableau groupée dans iOS 5. J'utilise 44, basé sur cette question, et il semble au moins à peu près la bonne hauteur.


2

Pour obtenir la hauteur par défaut, laissez-la supergérer:

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

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

[super tableView:tableView heightForHeaderInSection:section];renvoie 0 pour moi, peut-être parce que je n'utilise pas de plume ou de storyboard.
jk7

1
Cela ne fonctionne que si vous sous-classez UITableViewController.
Wallace

-1

Cela devrait faire l'affaire

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

Je pense que tu veux direreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];produit une erreur. Voulez-vous dire [tableView sectionHeaderHeight];?
jk7
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.