Obtenir le NSString hauteur
J'ai un NSString, et je veux savoir sa hauteur pour créer une UILabel.
Faire ce
NSString *string = @"this is an example";
CGSize size = [string sizeWithFont:[UIFont systemFontOfSize:10.0f]
forWidth:353.0
lineBreakMode:UILineBreakModeWordWrap];
float height = size.height;
hauteur est maintenant 13.0.
Si j'utilise cette chaîne
NSString *string = @"this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example ";
hauteur est toujours 13.0 (et avec 353 que la largeur, c'est impossible)... ce que je fais mal?
AJOUTER:
size.width;
fonctionne très bien... donc c'est comme si le lineBreakMode n'est pas correct... mais il est, n'est-ce pas?
Vous êtes de prendre de la taille de l'objet string, pas la CGSize vous venez de créer. C'est qu'une faute de frappe?
mais
Il ne le prend pas, à proprement parler, il agit sur lui, et vous donne en un de taille. Donc, si vous deviez changer
oui oui, désolé... j'ai écrit ici mal (mais dans Xcode, il était juste... et le journal est de 13,0)!
mais
sizeWithFont:forWidth:lineBreakMode
prend un NSString (pas un UILabel, par exemple)... donc c'est correct... ou pas?Il ne le prend pas, à proprement parler, il agit sur lui, et vous donne en un de taille. Donc, si vous deviez changer
float height = string.height;
à float height = size.height;
, je devine qu'il va faire plus de sens.oui oui, désolé... j'ai écrit ici mal (mais dans Xcode, il était juste... et le journal est de 13,0)!
OriginalL'auteur JAA | 2011-08-05
Vous devez vous connecter pour publier un commentaire.
La raison de ce que vous faites ne fonctionne pas comme vous le souhaiteriez est parce que
est pour "le Calcul des statistiques sur une Seule Ligne de Texte", alors que
est pour "le Calcul des Métriques de Plusieurs Lignes de Texte". À partir de la la documentation:
Essayez d'utiliser
-sizeWithFont:constrainedToSize:lineBreakMode:
au lieu de cela, par exemple, c'est ce que je fais d'habitude:OUI! c'est efficace!! merci!!!!!!
C'est juste trop de code pour quelque chose qui peut être fait avec une seule méthode. Et je reçois un downvote, lol.
Je suis complètement d'accord que votre méthode résout le problème global, mais votre réponse n'explique pas pourquoi les OP tentative a échoué. J'utilise la méthode ci-dessus pour garder mon étiquette de devenir trop grand, un problème qui
-sizeToFit
ne peut pas résoudre. Je ne sais pas pourquoi vous avez été vers le bas voté.Tout peut être résolu 🙂
if (label.frame.size.height > maxHeight) label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, maxHeight);
Mais il n'y avait aucune mention de la hauteur maximum de la question, donc je lui ai simplement proposé une solution plus simple.OriginalL'auteur PengOne
Selon la La Documentation
Vous devriez utiliser -[NSString sizeWithFont:constrainedToSize:lineBreakMode:] qui a un comportement similaire, mais vous pouvez uuse CGFLOAT_MAX que la hauteur de la taille.
OriginalL'auteur Joe