143 votes

IOS 7 Modification de la taille de la police pour les en-têtes de section UITableView

Quelqu'un peut-il svp m'instruire sur la manière la plus facile de changer la taille de la police pour le texte dans un UITableView en-tête de section?

J'ai les titres de section mises en œuvre à l'aide de la méthode suivante:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

Alors, je comprends comment réussir à modifier l'en-tête de section de la hauteur à l'aide de cette méthode:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

J'ai la UITableView cellules remplis à l'aide de cette méthode:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Cependant, je suis coincé à savoir comment augmenter la taille de la police - ou, d'ailleurs, le style de la police de l'en-tête de section de texte?

Quelqu'un peut s'il vous plaît aider? Merci.

382voto

Mark Semsel Points 813

Une autre façon de le faire serait de répondre à la UITableviewDelegate méthode "willDisplayHeaderView". La vue est en fait une instance d'un UITableViewHeaderFooterView.

L'exemple ci-dessous modifie la police, et aussi les centres le titre du texte verticalement et horizontalement à l'intérieur de la cellule. Notez que vous devez également répondre à de "heightForHeaderInSection" avoir des changements à votre en-tête de la hauteur comptabilisés dans la mise en page de la tableview. (Qui est, si vous décidez de modifier l'en-tête de la hauteur dans ce "willDisplayHeaderView" la méthode.)

Vous pouvez ensuite répondre à la "titleForHeaderInSection" méthode de ré-utiliser ce configuré en-tête avec les différents titres de section.

- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;

        header.textLabel.textColor = [UIColor redColor];
        header.textLabel.font = [UIFont boldSystemFontOfSize:18];
        CGRect headerFrame = header.frame;
        header.textLabel.frame = headerFrame;
        header.textLabel.textAlignment = NSTextAlignmentCenter;
}

Mise à JOUR: Pourrait tout aussi bien montrer l'exemple en Swift. (Remarque: si votre vue-contrôleur est un descendant d'un UITableViewController, cela devra être déclaré comme "override " func".)

func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {

    let header:UITableViewHeaderFooterView = view as UITableViewHeaderFooterView

    header.textLabel.textColor = UIColor.redColor()
    header.textLabel.font = UIFont.boldSystemFontOfSize(18)
    header.textLabel.frame = header.frame
    header.textLabel.textAlignment = NSTextAlignment.Center
}

121voto

mosca1337 Points 586

Malheureusement, vous devrez peut-être remplacer ceci:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
 

Essayez quelque chose comme ça:

 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    UILabel *myLabel = [[UILabel alloc] init];
    myLabel.frame = CGRectMake(20, 8, 320, 20);
    myLabel.font = [UIFont boldSystemFontOfSize:18];
    myLabel.text = [self tableView:tableView titleForHeaderInSection:section];

    UIView *headerView = [[UIView alloc] init];
    [headerView addSubview:myLabel];

    return headerView;
}
 

97voto

Leo Natan Points 25262

Alors que mosca1337 réponse est une bonne solution, à être prudent avec cette méthode. Pour un en-tête avec le texte de plus d'une ligne, vous aurez à effectuer les calculs de la hauteur de l'en-tête en tableView:heightForHeaderInSection: qui peut être lourd.

Une bien meilleure méthode est d'utiliser l'aspect de l'API:

[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setFont:[UIFont boldSystemFontOfSize:28]];

Cela va changer la police, tout en laissant de la table pour gérer les hauteurs de lui-même.

Pour des résultats optimaux, sous-classe de la vue de la table, et l'ajouter à la maîtrise de la chaîne (en appearanceWhenContainedIn:) assurez-vous que la police est modifié uniquement pour les vues de table.

26voto

user3681879 Points 11

Pour iOS 7, je l’utilise,

 
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;

    header.textLabel.font = [UIFont boldSystemFontOfSize:10.0f];
    header.textLabel.textColor = [UIColor orangeColor];
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X