Ich möchte ein Bild neben einem UILabel anzeigen, UILabel hat jedoch eine variable Textlänge, sodass ich nicht weiß, wo das Bild platziert werden soll. Wie kann ich das erreichen?
142
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
Wofür ist - [NSString sizeWithFont: forWidth: lineBreakMode:] gut?
Diese Frage könnte Ihre Antwort haben, es hat bei mir funktioniert.
Für 2014 habe ich diese neue Version bearbeitet, basierend auf dem äußerst praktischen Kommentar von Norbert unten! Das macht alles. Prost
// 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
Dadurch erhalten Sie die Größe des Etiketteninhalts, sodass Sie nur die Breite von dort erhalten können.yourLabel.intrinsicContentSize.width
super, siehe Antwort unten.yourLabel.intrinsicContentSize.width
für Objective-C / Swiftquelle
In kurzer Zeit
quelle
Die ausgewählte Antwort ist für iOS 6 und niedriger korrekt.
In iOS 7
sizeWithFont:constrainedToSize:lineBreakMode:
wurde veraltet . Es wird jetzt empfohlen, dass Sie verwendenboundingRectWithSize:options:attributes:context:
.Beachten Sie, dass der Rückgabewert a
CGRect
nicht a istCGSize
. Hoffentlich hilft das den Leuten, die es in iOS 7 verwenden.quelle
In iOS8 ist sizeWithFont veraltet, siehe
Sie können alle gewünschten Attribute in sizeWithAttributes hinzufügen. Andere Attribute, die Sie festlegen können:
und so weiter. Aber wahrscheinlich werden Sie die anderen nicht brauchen
quelle
Swift 4 Antworte, wer Constraint verwendet
Swift 5 Antworte, wer Constraint verwendet
quelle
quelle
Folgendes habe ich mir ausgedacht, nachdem ich einige Prinzipien anderer SO-Beiträge angewendet hatte, einschließlich Aarons Link:
In diesem Beispiel füge ich einer MKAnnotation-Klasse einen benutzerdefinierten Pin hinzu, der die Größe eines UILabels entsprechend der Textgröße ändert. Außerdem wird auf der linken Seite der Ansicht ein Bild hinzugefügt, sodass Sie einen Teil des Codes sehen, der den richtigen Abstand für das Bild und das Auffüllen verwaltet.
Der Schlüssel besteht darin,
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
die Abmessungen der Ansicht zu verwenden und anschließend neu zu definieren. Sie können diese Logik auf jede Ansicht anwenden.Obwohl Aarons Antwort für einige funktioniert, hat sie für mich nicht funktioniert. Dies ist eine weitaus detailliertere Erklärung, die Sie sofort ausprobieren sollten, bevor Sie irgendwohin gehen, wenn Sie eine dynamischere Ansicht mit einem Bild und einem UILabel mit veränderbarer Größe wünschen. Ich habe schon die ganze Arbeit für dich gemacht !!
quelle