38 votes

iPhone UITableViewCell: repositionner le textLabel

Je suis nouveau sur le développement iPhone et je suis actuellement en train de travailler sur un simple lecteur de flux RSS appli. Le problème que j'ai c'est que j'ai besoin de repositionner l' textLabel à l'intérieur de l' UITableViewCells. J'ai essayé setFrame ou setCenter , mais il ne fait rien. Personne ne sait ce que je dois faire à l'intérieur de l' tableView:cellForRowAtIndexPath: méthode pour repositionner l' textLabel sur le haut de la cellule (x = 0, y = 0)?

Merci

PS: L' UITableViewCell est référencé par une variable nommée cell. J'ai essayé [cell setFrame:CGRectMake(0, 0, 320, 20)] , sans succès.

100voto

wal Points 1290

Vous pouvez créer une sous-classe pour UITableViewCell et personnaliser le cadre de textLabel. Voir cette réponse: Les étiquettes s’alignant dans UITableViewCell . Cela fonctionne parfaitement pour moi.

C'est ma sous-classe

 #import "UITableViewCellFixed.h"
@implementation UITableViewCellFixed
- (void) layoutSubviews {
     [super layoutSubviews];
     self.textLabel.frame = CGRectMake(0, 0, 320, 20);
}
@end
 

C'est mon UITableViewControllerClass:

 UITableViewCellFixed *cell = (UITableViewCellFixed *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCellFixed alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
 

22voto

Kibernetik Points 805

Vous pouvez essayer indentationLevel , separatorInset et d'autres propriétés d'indentation de contenu de l'objet UITableViewCell.

10voto

Marian Busoi Points 309

On dirait que j'ai résolu mon propre problème. Voici du code, au cas où quelqu'un rencontrerait le même problème:

 UILabel *ttitle = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)] autorelease];
ttitle.font = [UIFont boldSystemFontOfSize:13];
ttitle.textColor    = [UIColor blackColor];
ttitle.textAlignment = UITextAlignmentLeft;

[ttitle setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];

[cell.contentView addSubview:ttitle];
 

L'idée est de créer votre propre objet label, car le textLabel est automatiquement positionné et ne peut pas être déplacé.

À votre santé.

9voto

brant Points 131

La raison l'affiche originale du code ne fonctionne pas, c'est qu'il semble que le cadre de la textLabel est définie après la UITableViewCell a été retourné à partir de votre délégué de la méthode.

J'ai remarqué que je peux réussir à modifier plusieurs propriétés de la textLabel, tels que l'alignement du texte, la couleur, la police, etc, mais en modifiant l'image n'a aucun effet et lorsque j'imprime le cadre de la débogueur plus tard (sur sélection), l'image n'est pas ce que j'ai mis. Par conséquent, je conclus que le framework UIKit est en train de modifier le cadre de la textLabel après il est retourné à partir de la méthode du délégué. Pas de doute, c'est probablement fait parce que les ingénieurs d'Apple voulait faire en sorte que votre texte a été établi à l'écran, de sorte qu'ils de la mesurer et de modifier l'image afin qu'elle s'adapte. Ils ont probablement pensé que les gens comme nous qui voulait modifier la position du texte serait en mesure de le faire par la sous-classement, ou simplement en ajoutant une autre UILabel (ou autre) comme une sous-vue. Un novice développeur peut avoir un moment très difficile, si son texte n'apparaît pas sur l'étiquette ou l'a été tronqué parce qu'ils n'ont pas de régler l'image.

Dans mon cas, je voulais que le texte à centrer horizontalement, soit d'une couleur/police/taille, et à être légèrement plus élevé verticalement dans la cellule. Trop paresseux pour la sous-classe la présente, j'ai d'abord essayé de modifier le cadre. Lorsque cela ne fonctionne pas, j'ai essayé de googler la réponse (trouvé ce post).

Ma solution finale a été de définir la numberOfLines propriété à 0 et ajouter un peu de fuite des retours chariot à mon texte. Maintenant QUE c'est un paresseux.

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