Ich möchte ein Bild neben einem UILabel anzeigen, aber UILabel hat variable Textlänge, daher weiß ich nicht, wo ich das Bild platzieren soll. Wie kann ich das erreichen?Wie berechnet man UILabel Breite basierend auf Textlänge?
Antwort
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
What is -[NSString sizeWithFont:forWidth:lineBreakMode:] good for?
diese Frage Ihre Antwort haben könnte, es funktionierte für mich.
Für das Jahr 2014 habe ich in dieser neuen Version, basierend auf dem ultra-handlichen Kommentar von Norbert unten bearbeitet! 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);
Hier ist etwas, was ich kam mit nach ein paar Prinzipien anderen SO Beiträge Anwendung, darunter Aaron Link:
AnnotationPin *myAnnotation = (AnnotationPin *)annotation;
self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier];
self.backgroundColor = [UIColor greenColor];
self.frame = CGRectMake(0,0,30,30);
imageView = [[UIImageView alloc] initWithImage:myAnnotation.THEIMAGE];
imageView.frame = CGRectMake(3,3,20,20);
imageView.layer.masksToBounds = NO;
[self addSubview:imageView];
[imageView release];
CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
CGRect newFrame = self.frame;
newFrame.size.height = titleSize.height + 12;
newFrame.size.width = titleSize.width + 32;
self.frame = newFrame;
self.layer.borderColor = [UIColor colorWithRed:0 green:.3 blue:0 alpha:1.0f].CGColor;
self.layer.borderWidth = 3.0;
UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(26,5,newFrame.size.width-32,newFrame.size.height-12)];
infoLabel.text = myAnnotation.title;
infoLabel.backgroundColor = [UIColor clearColor];
infoLabel.textColor = [UIColor blackColor];
infoLabel.textAlignment = UITextAlignmentCenter;
infoLabel.font = [UIFont systemFontOfSize:12];
[self addSubview:infoLabel];
[infoLabel release];
In diesem Beispiel ich einen benutzerdefinierten Stift auf eine MKAnnotation Klasse hinzu, dass Ändert die Größe eines UILabels entsprechend der Textgröße. Es fügt auch ein Bild auf der linken Seite der Ansicht hinzu, so dass Sie einen Teil des Codes sehen, der den richtigen Abstand zum Umgang mit dem Bild und dem Padding verwaltet.
Der Schlüssel besteht darin, CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]];
zu verwenden und dann die Dimensionen der Ansicht neu zu definieren. Sie können diese Logik auf jede Ansicht anwenden.
Obwohl Aarons Antwort für einige funktioniert, hat es bei mir nicht funktioniert. Dies ist eine viel detailliertere Erklärung, die Sie sofort ausprobieren sollten, bevor Sie irgendwo anders hingehen, wenn Sie eine dynamischere Ansicht mit einem Bild und resizierbaren UILabel möchten. Ich habe schon die ganze Arbeit für dich erledigt !!
Die ausgewählte Antwort ist für iOS 6 und niedriger korrekt.
In iOS 7, sizeWithFont:constrainedToSize:lineBreakMode:
wurde veraltet. Es wird jetzt empfohlen, boundingRectWithSize:options:attributes:context:
zu verwenden.
CGRect expectedLabelSize = [yourString boundingRectWithSize:sizeOfRect
options:<NSStringDrawingOptions>
attributes:@{
NSFontAttributeName: yourString.font
AnyOtherAttributes: valuesForAttributes
}
context:(NSStringDrawingContext *)];
Beachten Sie, dass der Rückgabewert ist ein CGRect
kein CGSize
. Hoffentlich werde von einigen Hilfe für Menschen sein, indem es in iOS 7.
In iOS8 sizeWithFont veraltet ist, lesen Sie bitte
CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];
Sie können alle gewünschten Attribute in sizeWithAttributes hinzufügen. Andere Attribute, die Sie festlegen können:
- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName
und so weiter. Aber wahrscheinlich werden Sie die anderen nicht brauchen
In swift
yourLabel.intrinsicContentSize().width
arbeitet auch an UIButton. –
Großartig +1 für die einfachste Antwort !! – iUser
CGRect rect = label.frame;
rect.size = [label.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:label.font.fontName size:label.font.pointSize]}];
label.frame = rect;
Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). –
Diese Antwort zeigt, wie die Etikettengröße entsprechend dem Text angepasst werden kann. Was ist das Problem? –
- 1. Wie berechnet man die Breite eines dbEdit basierend auf fieldsize?
- 2. Wie berechnet man ein Alter basierend auf einem Geburtstag?
- 3. Wie berechnet man einen Vektor basierend auf einem zentralen Ursprung
- 4. Wie berechnet man ein Gitter basierend auf 4 gekrümmten Kanten?
- 5. Dynamische benutzerdefinierte UITableViewCell Höhe basierend auf Etikett Textlänge in Swift
- 6. iPhone: UILabel Breite in CellForRowAtIndexPath
- 7. UILabel oder UIButton etwas wie "mehr anzeigen", wenn UILabel Textlänge größer
- 8. Aktualisiert UILabel Text basierend auf Komprimierung
- 9. Wie berechnet man Partituren?
- 10. Wie berechnet man die Schriftbreite?
- 11. Wie berechnet man die Breite einer Zeichenkette einer bestimmten Schriftart und Schriftgröße?
- 12. EmberJS Eigenschaft berechnet basierend auf Array nicht
- 13. Textlänge mit Dojo gfx
- 14. Wie GMT Zeit basierend auf lokaler Zeit in C berechnet
- 15. Xmarin: UILabel in UITableViewCell Aktualisierungsbreite
- 16. Dynamische Berechnung der UILabel-Breite in UITableViewCell
- 17. Wie schneidet man einen NSString basierend auf der grafischen Breite ab?
- 18. Wie berechnet man "Ansichten"?
- 19. Wie berechnet man 5^262144 in Erlang
- 20. AutoResize ContainerView die Breite nach dynamischen UILabel
- 21. Wie berechnet man die Größe eines UIFont, wenn der Text im Etikett auf die Breite beschränkt ist?
- 22. UILabel mit fester Breite und flexibler Höhe
- 23. UILabel feste Breite/feste Höhe erhalten Textnummer
- 24. AutoLayout dynamisch Größe UILabel Höhe und Breite
- 25. Wie berechnet man sofort, sobald man in das iPhone titelt?
- 26. Wie berechnet man den RadGrid-Zellenwert auf der Client-Seite?
- 27. Wie berechnet man freien Speicherplatz?
- 28. Berechnet Kontrolle auf Unterformular basierend auf aktuellen Datensatz
- 29. Breite der Tabelle Zelle basierend auf colgroup
- 30. Wie berechnet man die Koordinaten einer Pfeilspitze basierend auf dem Pfeil?
Nur eine Anmerkung: Dies ist seit iOS7 veraltet. Der bevorzugte Weg ist nun: '[yourString boundingRectWithSize: maximumLabelSize Optionen: NSStringDrawingUsesLineFragmentOrigin Attribute: @ {NSFontAttributeName: yourLabel.font} context: nil]; ' – Norbert
Sie können auch die IntrinsicContentSize-Eigenschaft verwenden. Ich bin nicht viel in Objective-c, aber es sollte wie folgt sein: 'self.yourLabel.intrinsicContentSize' Dies wird Ihnen die Größe des Etiketts Inhalt geben, so dass Sie nur die Breite von dort bekommen können . – Boris