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
에서 가능한 메서드UIView
1번입니다.
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
텍스트 크기에 따라 축소/확장해야 합니다.자동 레이아웃이 있는 스토리보드가 최적입니다.과 같습니다.
순서
UILABEL을 사용하다 .
0
★★★★★★에numberOfLines
의 of의UILabel
.Give it Top, Leading 및 Trailing 스페이스 핀 구속조건을 지정합니다.
- 이제 경고가 표시됩니다. 노란색 화살표를 클릭하십시오.
- 클릭합니다.
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
높이가 아래로 수 했습니다.(라벨의 높이가 높아지면 아래로 내려갈 수 있도록 버튼도 라벨 하단에 핀으로 고정했습니다.)
- 「 」의 라벨을 는, 「 」
UITableViewCell
그럼 이 답을 보세요.
[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의 높이를 조정하려면 이 메서드를 호출하지 말고 먼저 텍스트를 설정해야 합니다.
두 가지 방법으로 텍스트 및 기타 관련 컨트롤에 따라 레이블 크기를 조정할 수 있습니다.
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;
레이블 텍스트 크기를 계산하지 않으려면 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
// 이 후 라벨 프레임을 가져와 다른 관련 컨트롤을 재구성할 수 있습니다.
- 스토리보드에 누락된 구속조건을 추가합니다.
- 스토리보드에서 UILabel을 선택하고 "Line" 속성을 0으로 설정합니다.
- id:label을 사용하여 Controller.h에 UILabel을 Ref Outlet 합니다.
- 및 .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
'programing' 카테고리의 다른 글
작성자와 날짜를 포함하는 git 로그에서 가능한 가장 짧은 출력 (0) | 2023.04.12 |
---|---|
VBA를 사용하여 Excel의 표를 참조하려면 어떻게 해야 합니까? (0) | 2023.04.12 |
Common Table Expression(CTE; 공통 테이블 표현)을 사용하는 경우 (0) | 2023.04.07 |
데이터베이스의 모든 사용자에 대한 모든 권한/액세스를 찾기 위한 SQL Server 쿼리 (0) | 2023.04.07 |
SQL: WHERE 절 내의 IF 절 (0) | 2023.04.07 |