포함 된 텍스트에 맞게 UILabel 상자 / 바운드의 크기를 자동으로 조정할 수 있습니까? (디스플레이보다 큰 경우에는 신경 쓰지 않습니다)
따라서 사용자가 “hello”를 입력하거나 “내 이름이 정말로 길어서이 상자에 맞추기를 원합니다”라고하면 절대 잘리지 않으며 레이블이 ‘넓어집니다’?
답변
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에서 사용할 수 있는 메소드를 더 간단하게 사용할 수 UIView있지만 행 수를 1로 설정하여 안전합니다.
iOS 6 업데이트
자동 레이아웃을 사용하는 경우 기본 제공 솔루션이 있습니다. 줄 수를 0으로 설정하면 프레임 워크가 텍스트에 맞게 레이블의 크기를 적절하게 조정합니다 (높이 추가).
iOS 8 업데이트
sizeWithFont:더 이상 사용되지 않으므로 sizeWithAttributes:대신 사용하십시오.
- (float)expectedWidth{
[self setNumberOfLines:1];
CGSize expectedLabelSize = [[self text] sizeWithAttributes:@{NSFontAttributeName:self.font}];
return expectedLabelSize.width;
}
답변
를 사용 [label sizeToFit];하면 Daniels 카테고리에서 동일한 결과를 얻을 수 있습니다.
자동 레이아웃을 사용하고 제약 조건에 따라 레이블 크기를 조정하는 것이 좋습니다.
답변
우리가 원한다면 UILabel 다음 자동 레이아웃과 스토리 보드 텍스트 크기에 따라 축소 및 확대해야 최선의 방법입니다. 이를 달성하기위한 단계는 다음과 같습니다.
단계
-
UILabel을 뷰 컨트롤러에 넣고 원하는 위치에 배치하십시오. 또한 넣어
0위해numberOfLines의 특성UILabel. -
상단, 선행 및 후행 공간 핀 구속 조건을 지정하십시오.

- 이제 경고가 나타납니다. 노란색 화살표를 클릭하십시오.

- 를 클릭
Update Frame하고를 클릭하십시오Fix Misplacement. 이제이 UILabel은 텍스트가 적 으면 축소되고 텍스트가 많으면 확장됩니다.
답변
이것은 다른 답변 중 일부만큼 복잡하지 않습니다.
왼쪽과 위쪽 가장자리를 고정
자동 레이아웃을 사용하여 라벨의 왼쪽과 상단을 고정하는 구속 조건을 추가하십시오.
그 후 자동으로 크기가 조정됩니다.
노트
- 너비와 높이에 대한 구속 조건을 추가하지 마십시오. 레이블은 텍스트 내용에 따라 고유 한 크기를 갖습니다 .
- 이에 대한 도움을 주신이 답변 에 감사드립니다 .
-
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" } } - 레이블을 줄 바꿈하려면 IB에서 줄 수를 0으로 설정하고
myLabel.preferredMaxLayoutWidth = 150 // or whatever코드를 추가하십시오 . (또한 레이블 높이가 증가 할 때 아래로 이동하도록 단추를 레이블 아래쪽에 고정했습니다.)
- 내부에서 동적으로 크기를 조정하는 레이블을 찾고 있다면 이 답변
UITableViewCell을 참조하십시오 .
답변
[label sizeToFit];UILabel에서 텍스트를 조정하는 데 사용
답변
위의 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];
}
답변
내가 찾은 것은 내 상황에 맞는 작품입니다.
1) UILabel의 높이는 자동 레이아웃을 사용하여> = 0 제약 조건을 갖습니다. 너비는 고정되어 있습니다. 2) 텍스트를 UILabel에 할당하십시오. UILabel에는 해당 시점에서 이미 감독이 있습니다 (얼마나 중요한지 확실하지 않음). 3) 다음을 수행하십시오.
label.sizeToFit()
label.layoutIfNeeded()
라벨 높이가 이제 적절하게 설정되었습니다.




