programing

UILabel - 텍스트에 맞게 레이블 크기를 자동 조정하시겠습니까?

bestprogram 2023. 4. 12. 23:04

UILabel - 텍스트에 맞게 레이블 크기를 자동 조정하시겠습니까?

포함된 텍스트에 맞게 UILabel 박스/바운드의 크기를 자동 조정할 수 있습니까? (표시 크기보다 커도 상관없습니다.)

따라서 사용자가 "hello" 또는 "my name is really long"을 입력하면 이 상자에 넣을 수 있는 이름이 잘리지 않고 그에 따라 라벨이 확대됩니다.

for for for for for for for for for for for for 를 만든 요지를 확인해 .UILabel 것에 '아까운', '아까운', '아까운', '아까운'을 붙인다.UILabel모든 콘텐츠를 표시할 수 있는 높이: https://gist.github.com/1005520

또는, 다음의 투고를 확인해 주세요.https://stackoverflow.com/a/7242981/662605

이렇게 하면 높이가 늘어납니다만, 간단하게 변경해, 반대로 작업하거나 폭을 넓힐 수 있습니다.이렇게 하고 싶은 것은 다음과 같습니다.

@implementation UILabel (dynamicSizeMeWidth)

- (void)resizeToStretch{
    float width = [self expectedWidth];
    CGRect newFrame = [self frame];
    newFrame.size.width = width;
    [self setFrame:newFrame];
}

- (float)expectedWidth{
    [self setNumberOfLines:1];

    CGSize maximumLabelSize = CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX);

    CGSize expectedLabelSize = [[self text] sizeWithFont:[self font] 
                                            constrainedToSize:maximumLabelSize
                                            lineBreakMode:[self lineBreakMode]]; 
    return expectedLabelSize.width;
}

@end

'어울릴 수 있다'라고 하면 .sizeToFit에서 가능한 메서드UIView1번입니다.


iOS 6 업데이트

AutoLayout을 사용하는 경우 내장된 솔루션이 있습니다.줄 수를 0으로 설정하면 프레임워크는 텍스트에 맞게 레이블 크기를 적절하게 조정합니다(높이 추가).


iOS 8 업데이트

sizeWithFont: ""를 사용합니다.sizeWithAttributes:★★★★

- (float)expectedWidth{
    [self setNumberOfLines:1];

    CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];

    return expectedLabelSize.width;
}

「」를 사용합니다.[label sizeToFit];다니엘스 카테고리에서도 같은 결과를 얻을 수 있습니다.

단, autolayout을 사용하여 제약조건에 따라 라벨의 크기를 조정할 것을 권장합니다.

가 그것을 원한다면UILabel텍스트 크기에 따라 축소/확장해야 합니다.자동 레이아웃이 있는 스토리보드가 최적입니다.과 같습니다.

순서

  1. UILABEL을 사용하다 .0★★★★★★에numberOfLines의 of의 UILabel.

  2. Give it Top, Leading 및 Trailing 스페이스 핀 구속조건을 지정합니다.

여기에 이미지 설명 입력

  1. 이제 경고가 표시됩니다. 노란색 화살표를 클릭하십시오.

여기에 이미지 설명 입력

  1. 클릭합니다.Update Frame 다음 을 클릭합니다.Fix Misplacement

이것은 다른 대답보다 복잡하지 않다.

여기에 이미지 설명 입력

왼쪽과 위쪽 가장자리를 고정합니다.

자동 레이아웃을 사용하여 레이블의 왼쪽과 위쪽을 고정하는 구속조건을 추가합니다.

여기에 이미지 설명 입력

그런 다음 크기가 자동으로 조정됩니다.

메모들

  • 폭과 높이에 대한 구속조건을 추가하지 마십시오.레이블은 텍스트 내용을 기준으로 고유한 크기를 가집니다.
  • 답변에 도움을 주셔서 감사합니다.
  • 할 .sizeToFit자동 레이아웃을 사용할 때.샘플 프로젝트의 완전한 코드는 다음과 같습니다.

    import UIKit
    class ViewController: UIViewController {
    
        @IBOutlet weak var myLabel: UILabel!
    
        @IBAction func changeTextButtonTapped(sender: UIButton) {
            myLabel.text = "my name is really long i want it to fit in this box"
        }
    }
    
  • 할에서 줄 를 0으로 하고 IB를 추가합니다.myLabel.preferredMaxLayoutWidth = 150 // or whatever 높이가 아래로 했습니다.(라벨의 높이가 높아지면 아래로 내려갈 수 있도록 버튼도 라벨 하단에 핀으로 고정했습니다.)

여기에 이미지 설명 입력

여기에 이미지 설명 입력

[label sizeToFit];UILABEL

내 상황에 맞는 작업을 다음에 제시하겠습니다.

1) UILabel의 높이는 autolayout을 사용하여 >= 0의 구속조건을 가진다.폭은 고정되어 있습니다.2) 텍스트를 UILabel에 할당합니다.UILabel에는 이미 슈퍼뷰가 있습니다(그것이 얼마나 중요한지 잘 모르겠습니다).3) 다음으로 다음을 수행합니다.

    label.sizeToFit()
    label.layoutIfNeeded()

이제 라벨의 높이가 적절하게 설정됩니다.

위의 Daniel의 답변을 바탕으로 몇 가지 방법을 만들었습니다.

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text
{
    CGSize maximumLabelSize     = CGSizeMake(290, FLT_MAX);

    CGSize expectedLabelSize    = [text sizeWithFont:label.font
                                constrainedToSize:maximumLabelSize
                                    lineBreakMode:label.lineBreakMode];

    return expectedLabelSize.height;
}

-(void)resizeHeightToFitForLabel:(UILabel *)label
{
    CGRect newFrame         = label.frame;
    newFrame.size.height    = [self heightForLabel:label withText:label.text];
    label.frame             = newFrame;
}

-(void)resizeHeightToFitForLabel:(UILabel *)label withText:(NSString *)text
{
    label.text              = text;
    [self resizeHeightToFitForLabel:label];
}
@implementation UILabel (UILabel_Auto)

- (void)adjustHeight {

    if (self.text == nil) {
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.bounds.size.width, 0);
        return;
    }

    CGSize aSize = self.bounds.size;
    CGSize tmpSize = CGRectInfinite.size;
    tmpSize.width = aSize.width;

    tmpSize = [self.text sizeWithFont:self.font constrainedToSize:tmpSize];

    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, aSize.width, tmpSize.height);
}

@end

카테고리 방식입니다.UILabel의 높이를 조정하려면 이 메서드를 호출하지 말고 먼저 텍스트를 설정해야 합니다.

두 가지 방법으로 텍스트 및 기타 관련 컨트롤에 따라 레이블 크기를 조정할 수 있습니다.

  1. iOS 7.0 이상용

    CGSize labelTextSize = [labelText boundingRectWithSize:CGSizeMake(labelsWidth, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName : labelFont
                                                        }
                                              context:nil].size;
    

iOS 7.0 이전 버전에서는 라벨 크기를 계산하는 데 사용할 수 있었습니다.

CGSize labelTextSize = [label.text sizeWithFont:label.font 
                            constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT)  
                                lineBreakMode:NSLineBreakByWordWrapping];

// labelTextHeight에 따라 다른 컨트롤의 이름을 변경합니다.

CGFloat labelTextHeight = labelTextSize.height;
  1. 레이블 텍스트 크기를 계산하지 않으려면 UILabel 인스턴스에서 -sizeToFit을 사용할 수 있습니다.

    [label setNumberOfLines:0]; // for multiline label
    [label setText:@"label text to set"];
    [label sizeToFit];// call this to fit size of the label according to text
    

// 이 후 라벨 프레임을 가져와 다른 관련 컨트롤을 재구성할 수 있습니다.

  1. 스토리보드에 누락된 구속조건을 추가합니다.
  2. 스토리보드에서 UILabel을 선택하고 "Line" 속성을 0으로 설정합니다.
  3. id:label을 사용하여 Controller.h에 UILabel을 Ref Outlet 합니다.
  4. 및 .m 추가[label sizeToFit];in viewDidLoad

size To Fit() 메서드는 제약조건에 잘 맞지 않지만 iOS 9에서는 이것만 있으면 됩니다.

label.widthAnchor.constraint(equalToConstant: label.intrinsicContentSize.width).activate()

자동차 레이아웃에 큰 문제가 있었습니다.테이블 셀 안에 두 개의 컨테이너가 있습니다.두 번째 컨테이너는 항목 설명(0~1000자)에 따라 크기가 조정되며, 행은 이에 따라 크기가 조정되어야 합니다.

누락된 성분은 설명의 가장 낮은 제약 조건이었다.

동적 요소의 하단 구속조건을 = 0에서 > = 0으로 변경했습니다.

언제 들어도 딱!:)

    name.text = @"Hi this the text I want to fit to"
    UIFont * font = 14.0f;
    CGSize size = [name.text sizeWithAttributes:@{NSFontAttributeName: font}];
    nameOfAssessment.frame = CGRectMake(400, 0, size.width, 44);
    nameOfAssessment.font = [UIFont systemFontOfSize:font];

하나의 라인 출력을 표시한 다음 속성 Line=0을 설정하고 다중 라인 출력을 표시한 다음 속성 Line=1 등을 설정할 수 있습니다.

[self.yourLableName sizeToFit];

또, 다음과 같은 어프로치가 있습니다.

[self.myLabel changeTextWithAutoHeight:self.myStringToAssignToLabel width:180.0f];

언급URL : https://stackoverflow.com/questions/8796862/uilabel-auto-size-label-to-fit-text