42 votes

Comment trouver UILabel du nombre de Lignes

J'affiche le texte dans UILabel en utilisant la méthode d'enveloppement. Je veux maintenant vous devez trouver le nombre de nombre de ligne est-il dans UILabel.

S'il y a un moyen de trouver la UILabel du nombre de lignes de comptage.

Merci.

52voto

Kalle Points 6804

Disons que vous avez un UILabel *myLabel et vous voulez trouver la hauteur de l'étiquette (avec quelques ajustements, vous pouvez obtenir le nombre de lignes en divisant la hauteur avec un nombre qui dépend de la taille de la police).

UILabel *myLabel;
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font 
                            constrainedToSize:myLabel.frame.size 
                                lineBreakMode:UILineBreakModeWordWrap];
CGFloat labelHeight = labelSize.height;

Espérons que cela aide. Si cela ne fonctionne pas, faites le moi savoir et je vais creuser plus loin. Aussi, le code non testé, mais il a travaillé à partir de la référence.

Pour un exemple plus complet, voici le code que j'ai mis dans le viewDidLoad: méthode de vue contrôleur:

[super viewDidLoad];
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50,50,200,350)];
myLabel.numberOfLines = 0;
myLabel.lineBreakMode = UILineBreakModeWordWrap;
myLabel.text = @"This is some text in a UILabel which is long enough to wrap around the lines in said UILabel. This is a test, this is only a test.";
[self.view addSubview:myLabel];
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font 
                            constrainedToSize:myLabel.frame.size 
                                lineBreakMode:UILineBreakModeWordWrap];
CGFloat labelHeight = labelSize.height;
NSLog(@"labelHeight = %f", labelHeight);
[myLabel release];

La sortie de la NSLog va:

2010-11-15 18:25:27.817 so_labelheight[728:307] labelHeight = 126.000000

7voto

AdamPro13 Points 569

La méthode -sizeWithFont:constrainedToSize:lineBreakMode est maintenant obsolète. Vous souhaitez utiliser la méthode -boundingRectWithSize:options:attributes:context: maintenant.

Voici un exemples:

CGSize boundingRectSize = CGSizeMake(widthToConstrainTo, CGFLOAT_MAX);
NSDictionary *attributes = @{NSFontAttributeName : [UIFont fontWithName:fontName size:14]};
CGRect labelSize = [labelString boundingRectWithSize:boundingRectSize options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                                attributes:attributes
                                                   context:nil];

Dans l'exemple ci-dessus, je sais que la largeur je veux limiter l'étiquette, mais depuis que je ne suis pas sûr de la hauteur, je viens de max la hauteur param aide d' CGFLOAT_MAX. Pour l' options vous devez utiliser NSStringDrawingUsesLineFragmentOrigin et NSStringDrawingUsesFontLeading si vous essayez de calculer la taille d'une étiquette qui peut être n'importe quel nombre de lignes.

6voto

guenis Points 1698

sizeWithFont est obsolète dans iOS 7, vous pouvez utiliser ceci à la place:

- (int)lineCountForText:(NSString *) text
{
    UIFont *font = ...

    CGRect rect = [text boundingRectWithSize:CGSizeMake(200, MAXFLOAT)
                                     options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@{NSFontAttributeName : font}
                                     context:nil];

    return ceil(rect.size.height / font.lineHeight);
}

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