Comment calculer UILabel largeur en fonction de la longueur du texte?
Je veux afficher une image à côté d'un UILabel, cependant UILabel est variable et la longueur du texte, donc je ne sais pas où placer l'image. Comment puis-je y arriver?
Vous devez vous connecter pour publier un commentaire.
Qu'est-ce que -[NSString sizeWithFont:forWidth:lineBreakMode:] bon?
cette question est peut-être votre réponse, il a travaillé pour moi.
Pour 2014, j'ai édité dans cette nouvelle version, basée sur l'ultra-pratique commentaire par Norbert ci-dessous! Ce n'est tout. Cheers
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
self.yourLabel.intrinsicContentSize
Cela vous donnera la taille de l'étiquette de contenu, de sorte que vous pouvez obtenir la largeur à partir de là.yourLabel.intrinsicContentSize.width
fonctionne très bien, vérifier la réponse ci-dessous.yourLabel.intrinsicContentSize.width
pour Objective-C /SwiftDans swift
La réponse sélectionnée est correcte pour iOS 6 et ci-dessous.
Dans iOS 7,
sizeWithFont:constrainedToSize:lineBreakMode:
a été obsolète. Il est maintenant recommandé que vous utilisezboundingRectWithSize:options:attributes:context:
.Noter que la valeur de retour est un
CGRect
pas unCGSize
. Espérons que ce sera de l'aide à des gens à l'utiliser dans iOS 7.Dans iOS8 sizeWithFont a été abandonné, veuillez vous référer à
Vous pouvez ajouter tous les attributs que vous voulez dans sizeWithAttributes.
D'autres attributs que vous pouvez définir:
et ainsi de suite. Mais sans doute que vous n'aurez pas besoin d'autres
Swift 4 Réponse, qui sont par la Contrainte
Voici quelque chose qui m'est venu après l'application de quelques principes de l'autre AFIN de les postes, y compris Aaron lien:
Dans cet exemple, je vais ajouter un code pin personnalisé pour un MKAnnotation classe qui redimensionne un UILabel en fonction de la taille du texte. Il ajoute également une image sur le côté gauche de la vue, de sorte que vous voyez une partie du code de la gestion de l'espacement approprié pour traiter l'image et le rembourrage.
La clé est d'utiliser
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
et puis redéfinir la vue de ses dimensions. Vous pouvez appliquer cette logique à tout point de vue.Bien qu'Aaron réponse qui fonctionne pour certains, cela n'a pas fonctionné pour moi. C'est beaucoup plus détaillée que vous devriez essayer immédiatement avant d'aller ailleurs si vous voulez une image plus dynamique avec une image et redimensionnable UILabel. J'ai déjà fait tout le travail pour vous!!