Je veux afficher une image à côté d'un UILabel, cependant UILabel a une longueur de texte variable, donc je ne sais pas où placer l'image. Comment puis-je accomplir cela?
142
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
À quoi sert - [NSString sizeWithFont: forWidth: lineBreakMode:]?
cette question pourrait avoir votre réponse, cela a fonctionné pour moi.
Pour 2014, j'ai édité dans cette nouvelle version, basée sur le commentaire ultra-pratique de Norbert ci-dessous! Cela fait tout. À votre santé
// yourLabel is your UILabel.
float widthIs =
[self.yourLabel.text
boundingRectWithSize:self.yourLabel.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{ NSFontAttributeName:self.yourLabel.font }
context:nil]
.size.width;
NSLog(@"the width of yourLabel is %f", widthIs);
[yourString boundingRectWithSize:maximumLabelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:yourLabel.font } context:nil];
self.yourLabel.intrinsicContentSize
cela vous donnera la taille du contenu de l'étiquette, vous pourrez donc simplement obtenir la largeur à partir de là.yourLabel.intrinsicContentSize.width
très bien, vérifiez la réponse ci-dessous.yourLabel.intrinsicContentSize.width
pour Objective-C / Swiftla source
En rapide
la source
La réponse sélectionnée est correcte pour iOS 6 et inférieur.
Dans iOS 7,
sizeWithFont:constrainedToSize:lineBreakMode:
est obsolète . Il est maintenant recommandé d'utiliserboundingRectWithSize:options:attributes:context:
.Notez que la valeur de retour n'est
CGRect
pas unCGSize
. J'espère que cela aidera les personnes qui l'utilisent dans iOS 7.la source
Dans iOS8, sizeWithFont est obsolète, veuillez vous référer à
Vous pouvez ajouter tous les attributs souhaités dans sizeWithAttributes. Autres attributs que vous pouvez définir:
etc. Mais tu n'auras probablement pas besoin des autres
la source
Swift 4 Answer qui utilise la contrainte
Swift 5 Answer qui utilise la contrainte
la source
la source
Voici quelque chose que j'ai trouvé après avoir appliqué quelques principes à d'autres articles SO, y compris le lien d'Aaron:
Dans cet exemple, j'ajoute une épingle personnalisée à une classe MKAnnotation 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 gérant l'espacement approprié pour gérer l'image et le remplissage.
La clé est d'utiliser
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
puis de redéfinir les dimensions de la vue. Vous pouvez appliquer cette logique à n'importe quelle vue.Bien que la réponse d'Aaron fonctionne pour certains, cela n'a pas fonctionné pour moi. C'est une explication beaucoup plus détaillée que vous devriez essayer immédiatement avant d'aller ailleurs si vous voulez une vue plus dynamique avec une image et un UILabel redimensionnable. J'ai déjà fait tout le travail pour vous !!
la source