포함 된 텍스트에 맞게 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()
라벨 높이가 이제 적절하게 설정되었습니다.