[ios] 텍스트 길이를 기준으로 UILabel 너비를 계산하는 방법은 무엇입니까?

UILabel 옆에 이미지를 표시하고 싶지만 UILabel에는 가변 텍스트 길이가 있으므로 이미지를 배치 할 위치를 모릅니다. 어떻게하면됩니까?



답변

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
                        constrainedToSize:maximumLabelSize
                        lineBreakMode:yourLabel.lineBreakMode]; 

-[NSString sizeWithFont : forWidth : lineBreakMode :]는 무엇입니까?

이 질문에 답이있을 수도 있습니다.


2014 년에는 아래 Norbert의 매우 유용한 의견을 바탕으로이 새 버전으로 편집했습니다! 이것은 모든 것을한다. 건배

// 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);


답변

yourLabel.intrinsicContentSize.width위한 오브젝티브 C / 스위프트


답변

신속하게

 yourLabel.intrinsicContentSize().width 


답변

선택한 답변은 iOS 6 이하에서 정확합니다.

아이폰 OS 7 년 sizeWithFont:constrainedToSize:lineBreakMode:되었습니다 되지 않습니다 . 이제 사용하는 것이 좋습니다 boundingRectWithSize:options:attributes:context:.

CGRect expectedLabelSize = [yourString boundingRectWithSize:sizeOfRect
                                                    options:<NSStringDrawingOptions>
                                                 attributes:@{
                                                    NSFontAttributeName: yourString.font
                                                    AnyOtherAttributes: valuesForAttributes
                                                 }
                                                    context:(NSStringDrawingContext *)];

반환 값은 a가 CGRect아닙니다 CGSize. 잘만되면 그것은 iOS 7에서 그것을 사용하는 사람들에게 도움이 될 것입니다.


답변

iOS8에서 sizeWithFont는 더 이상 사용되지 않습니다.

CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];

sizeWithAttributes에 원하는 모든 속성을 추가 할 수 있습니다. 설정할 수있는 다른 속성 :

- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName

등등. 그러나 아마도 당신은 다른 사람들이 필요하지 않을 것입니다


답변

Swift 4 제약 조건을 사용하는 사람에게 답변

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

Swift 5 제약 조건을 사용하는 사람에게 답변

label.text = "Hello World"

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


답변

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