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

rêne
la source
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;
}
Ajaxharg
la source
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.

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

Ronhippler
la source
4

Pour swift 4.2, vous devez retourner UITableView.automaticDimension

Muvimotv
la source
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.

Jason George
la source
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];
}
Hendrik
la source
[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];
}
Yogesh D
la source
Je pense que tu veux direreturn [self sectionHeaderHeight];
TMB
@TMB [self sectionHeaderHeight];produit une erreur. Voulez-vous dire [tableView sectionHeaderHeight];?
jk7