web-dev-qa-db-fra.com

Comment obtenir la largeur correcte d'un UILabel après la définition du texte?

Je reçois la largeur d'un UILabel [après que le texte ait été défini] avec: 

myUILabel.frame.width

mais c'est toujours la même largeur, peu importe s'il contient le String: "Hello." ou le String: "Hello everyone on this planet." Mais UILabel doit avoir une plus grande largeur avec la deuxième chaîne.

17
Megaetron

Essayez myUILabel.intrinsicContentSize(). Assurez-vous de définir votre police en premier, bien sûr.

37
Jolly Roger

Vous devriez utiliser [label sizeToFit]

sizeToFit sur l’étiquette étendra l’étiquette pour accueillir le texte.

L'autre solution consiste à calculer la largeur de la chaîne et à recadrer l'étiquette en fonction de la largeur de la chaîne.

Pour la deuxième solution, vous pouvez calculer la taille de la chaîne comme suit:

CGSize strSize = CGSizeZero;

CGSize minSize = CGSizeZero;

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
    NSAttributedString *attributedText = [[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: label.font}] autorelease];
    CGRect rect = [attributedText boundingRectWithSize:constraintSize
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                               context:nil];
    strSize = rect.size;
}
else
{
    strSize = [text sizeWithFont:label.font constrainedToSize:constraintSize];
}
0
Sanjay Mohnani