Andere Tipps

yourLabel.intrinsicContentSize.width für Objective-C / Swift

In swift

 yourLabel.intrinsicContentSize().width 

Die gewählte Antwort ist richtig für iOS 6 und unten.

In iOS 7, sizeWithFont:constrainedToSize:lineBreakMode: wurde deprecated . Es wird nun empfohlen, dass Sie boundingRectWithSize:options:attributes:context: 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 würde von einiger 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]}];

können Sie alle Attribute hinzufügen, die Sie in sizeWithAttributes möchten. Andere Attribute können Sie einstellen:

- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName

und so weiter. Aber wahrscheinlich werden Sie nicht die anderen brauchen

CGRect rect = label.frame;
rect.size = [label.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:label.font.fontName size:label.font.pointSize]}];
label.frame = rect;

Swift 4 Antwort, die Constraint verwenden

label.text = "Hello World"

var rect: CGRect = label.frame //get frame of label
rect.size = (label.text?.size(attributes: [NSFontAttributeName: UIFont(name: label.font.fontName , size: label.font.pointSize)!]))! //Calculate as per label font
labelWidth.constant = rect.width // set width to Constraint outlet

Hier ist etwas, kam ich 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 bin das Hinzufügen eines benutzerdefinierten Stift zu einer MKAnnotation Klasse, die eine UILabel entsprechend der Textgröße skaliert. Es fügt auch ein Bild auf der linken Seite der Ansicht, so dass Sie einen Teil der Verwaltung von Code den richtigen Abstand sehen, das Bild und Polsterung zu behandeln.

Der Schlüssel ist CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]]; zu verwenden und dann die Dimensionen Sicht neu zu definieren. Sie können diese Logik zu jeder Ansicht gelten.

Obwohl Aaron Antwort für einige funktioniert, ist es nicht für mich arbeiten. Dies ist eine weit detailliertere Erklärung, dass Sie sofort, bevor sie anderswo versuchen sollten, wenn Sie eine dynamische Ansicht mit einem Bild und veränderbare UILabel wollen. Ich habe schon die ganze Arbeit für Sie !!

scroll top