2010-06-23 3 views
2

Depuis la mise à niveau de XCode vers la version 3.2.3 avec iPhone SDK 4, mon code ne fonctionne plus.Comment définir l'alignement de texte UITableViewCellStyleSubtitle au centre de l'iPhone iOS4?

Je dispose d'une cellule par défaut avec le style UITableViewCellStyleSubtitle et que vous souhaitez définir le textAlignment de textLabel et detailTextLabel à center, mais rien ne se passe. Même code utilisé auparavant ne fonctionne plus maintenant. Au UITableViewCellStyleDefault l'alignement du centre fonctionne toujours.

Est-ce que quelqu'un sait comment résoudre ce problème? Je ne veux pas utiliser une cellule personnalisée seulement en fait de cela.

Répondre

4

La raison pour laquelle le texte n'est pas centré est que l'étiquette est seulement aussi large que le texte. Vous pouvez confirmer cela en définissant la couleur d'arrière-plan de l'étiquette texte:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    cell.textLabel.backgroundColor = [UIColor orangeColor]; 
} 

Réglage de la largeur de la cellule manuellement ne semble pas aussi avoir un effet. Donc, vous devriez vraiment ajouter vos propres sous-vues ou créer votre propre sous-classe de UITableViewCell.

Les docs pour UITableViewCellStyleSubtitle disent même:

Un style pour une cellule avec une étiquette aligné à gauche sur le dessus et un étiquette aligné à gauche ci-dessous en plus petit texte gris . L'application iPod utilise des cellules dans ce style.

+0

vous avez raison, mais pourquoi cela a bien fonctionné dans les précédents iOS 3.0? la documentation n'a pas été modifiée depuis. Je pense que la propriété textAlignment n'aligne normalement pas le texte plutôt que l'étiquette. –

+1

J'ai juste essayé d'exécuter le code qui colore l'arrière-plan dans différentes versions du simulateur: il ne fonctionne que dans 3.0. De 3.1 sur l'étiquette est seulement aussi large que le texte. Je suppose qu'ils l'ont changé en 3.1 pour rendre le dessin plus rapide (à cause des vues plus petites). La documentation indique que les étiquettes sont alignées à gauche, donc c'est ok. Vous ne pouvez pas compter sur des fonctionnalités non documentées. – Lextar

0

ok finalement l'équipe de développement d'Apple a répondu à mon rapport de bogue du 23 Juin 2010:

"S'il vous plaît essayer de définir l'alignement du texte dans layoutSubviews après avoir appelé super."

1

est ici une solution en deux parties pour modifier la largeur de l'étiquette après avoir rendu, permettant ainsi le centrage se produise:

-- (void) updateCenteringForTextLabelInCell:(UITableViewCell*)cell { 

    UILabel* label = cell.textLabel; 

    label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, cell.contentView.frame.size.width, label.frame.size.height); 

} 


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

{ 

// do your usual 

// call the helper method 

[self performSelector:@selector(updateCenteringForTextLabelInCell:) withObject:cell afterDelay:0.05]; 

} 
Questions connexes