2 votes

Difficulté à envelopper le texte

J'utilise le code suivant pour ajouter du texte dans IOS

//Set up label frame
UILabel *tempLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 10, 210, 80)];
self.answer_text_label = tempLabel;
[tempLabel release];    
[self.preview_answer_container addSubview:self.answer_text_label];

//Populate label with text
self.answer_text_label.text = self.answer.text;
self.answer_text_label.numberOfLines = 4;
self.answer_text_label.lineBreakMode = UILineBreakModeWordWrap;
[self.answer_text_label sizeToFit];

Cependant, le résultat que j'obtiens est le suivant : le texte semble déborder vers la droite au lieu de rester dans le cadre comme le stipule la configuration de mon étiquette 'CGRectMake(100, 10, 210, 80)'.

enter image description here

L'habillage fonctionne si je passe à self.answer_text_label.numberOfLines = 0 . Mais cela ne fonctionnera pas pour moi, car je dois contraindre le texte dans le cadre de l'étiquette stipulée.

Y a-t-il un moyen d'envelopper le texte et de ne pas dépasser 4 lignes ?

EDIT :

Essayez le code suggéré

self.answer_text_label.text = self.answer.text;
[self.answer_text_label sizeToFit];
CGRect labelRect = self.answer_text_label.frame;
labelRect.origin.y = CGRectGetMaxY(labelRect);
labelRect.size = self.answer_text_label.frame.size;
self.answer_text_label.frame = labelRect;

Le résultat est le suivant. Cela ne semble pas résoudre mon problème

enter image description here

2voto

rishi Points 7825

Essayez de définir le cadre explicitement -

[self.answer_text_label sizeToFit];
CGRect labelRect = self.answer_text_label.frame;
labelRect.origin.y = CGRectGetMaxY(labelRect);
labelRect.size = self.answer_text_label.frame.size;
self.answer_text_label.frame = labelRect;

EDIT - Pas besoin d'utiliser ceci, il suffit d'utiliser ce qui suit -. supprimez ces éléments du code, utilisez simplement ce qui suit, pas d'autre propriété du cadre, supprimez aussi sizeToFit

self.answer_text_label.numberOfLines = 4;
self.answer_text_label.lineBreakMode = UILineBreakModeWordWrap;

Pour l'alignement vertical - (avec la ligne de code ci-dessus, utilisez-la également, et n'utilisez pas la fonction "size to fit")

    CGSize textSize = [self.answer_text_label.text sizeWithFont:self.answer_text_label.font 
                                constrainedToSize:CGSizeMake(self.answer_text_label.frame.size.width, MAXFLOAT)
                                    lineBreakMode:self.answer_text_label.lineBreakMode];
self.answer_text_label.frame = CGRectMake(20.0f, 20.0f, textSize.width, textSize.height);

0voto

Aniruddha Points 2443

Dans iOS 6 et les versions ultérieures, utilisez NSLineBreakByWordWrapping et non UILineBreakModeWordWrap.

self.answer_text_label.lineBreakMode = NSLineBreakByWordWrapping;

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