327 votes

Réglage hauteur UILabel selon le texte

Considérons j'ai le texte suivant dans un UILabel (une longue ligne de texte dynamique):

Depuis l'étranger de l'armée largement dépasse celui de l'équipe, les joueurs doivent utiliser le monde post-apocalyptique à leur avantage, tels que la recherche de couvrir derrière les bennes à ordures, des piliers, des voitures, des décombres, et d'autres objets.

Je veux redimensionner l' UILabel's de la hauteur de sorte que le texte peut en contenir. Je suis en utilisant les propriétés suivantes de l' UILabel afin de rendre le texte à l'intérieur de l'envelopper.

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

S'il vous plaît laissez-moi savoir si je ne suis pas dans la bonne direction. Merci.

417voto

PyjamaSam Points 7802

sizeWithFont constrainedToSize:lineBreakMode: est la méthode à utiliser. Un exemple de comment l'utiliser est ci-dessous:

 //Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
 

250voto

DonnaLea Points 2811

Vous n’allaient pas dans la bonne direction. Tout ce que vous devez faire c’est :

46voto

Vitali Tchalov Points 164

Dans iOS 6, Apple a ajouté une propriété à UILabel qui simplifie grandement la dynamique verticale de redimensionnement des étiquettes: preferredMaxLayoutWidth.

En utilisant cette propriété en combinaison avec lineBreakMode = NSLineBreakByWordWrapping et sizeToFit méthode permet de redimensionner un UILabel instance à la hauteur que peut accueillir l'ensemble du texte.

Une citation de iOS documentation:

preferredMaxLayoutWidth Le préféré largeur maximale (en points) pour une multiligne étiquette.

Discussion Cette propriété affecte la taille de l'étiquette lorsque les contraintes de mise en forme sont appliquées. Lors de la présentation, si le texte s'étend au-delà de la largeur spécifiée par cette propriété, le texte est transféré à une ou plusieurs nouvelles lignes, ce qui augmente la hauteur de l'étiquette.

Un exemple:

...
UILabel *status = [[UILabel alloc] init];
status.lineBreakMode = NSLineBreakByWordWrapping;
status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.

[self addSubview:status]; // self here is the parent view

status.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.

status.text = @"Some quite lengthy message may go here…";
[status sizeToFit];
[status setNeedsDisplay];
...

16voto

iappdeveloper Points 131

Merci les gars pour vous aider, voici le code j’ai essayé qui fonctionne pour moi

12voto

Solution d’iOS7 préalable et iOS7 ci-dessus

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