UILabel의 minimumScaleFactor는 어떻게 작동합니까?


109

나는 minimumFontSize전에 사용 했지만 그 기능은 이제 더 이상 사용되지 않으며 어떻게 minimumScaleFactor작동 하는지 이해하지 못합니다 .

최대 글꼴 크기는 10이고 최소 글꼴 크기는 7입니다.

스케일 팩터를 사용하여 글꼴 크기를 7로 축소하려면 어떻게해야합니까?

UILabel 창조:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

답변:


204

당신은 설정해야 label.adjustsFontSizeToFitWidth = YES;


1
완벽합니다. 이것은 내 코드에서 누락 된 부분입니다. 감사합니다 : D
Fogmeister

14
참고 : "Apple의 문서에 따르면 minimumScaleFactor는 numberOfLines가 1로 설정된 경우에만 작동합니다. 0 또는 1보다 큰 값을 사용하면 작동하지 않습니다." . 감사합니다 SeanK.
samthui7

대박! XIB에서 minumumScaleFactor를 설정하면 adjustsFontSizeToFitWidth를 설정할 필요가 없지만 코드에서 수행 할 때 필요합니다.
Politta 2017 년

104

다른 답변이 말하는 것 외에도 minSize / defaultSize (division)를으로 넣으면 minimumScaleFactor이전을 사용하는 것과 동일합니다 minimumFontSize.

예를 들어 기본 레이블 크기를 사용하여 최소 글꼴 크기를 10으로 설정하려면 다음을 수행 할 수 있습니다.

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

( [UIFont labelFontSize]기본값이 아닌 경우 레이블의 글꼴 크기로 바꿉니다 ).

다음과 같습니다. [label setMinimumFontSize:10.0];


부서는 CGFloat로 캐스팅되어야합니다. 그렇지 않으면 작동하지 않습니다.
dwery dec

@dwery 10 / labelSize를 수행하면 잘린 정수 값 0으로 끝날 수 있지만 10.0 또는 10.f는 명시 적으로 캐스팅하지 않고 잘 작동합니다.
Kalle

당신 말이 맞아요. 어떤 코드에서 작동하지 않았는지 기억할 수 없습니다. 아마도 f 또는 점이 누락되었을 것입니다.
dwery

20

문서 에 따르면 :

이 속성을 사용하여 레이블의 텍스트를 표시 할 때 사용할 허용 가능한 글꼴 크기를 생성하는 현재 글꼴 크기에 대한 최소 승수를 지정합니다. 이 속성 값을 0으로 지정하면 현재 글꼴 크기가 가장 작은 글꼴 크기로 사용됩니다.

따라서 레이블의 기본 글꼴 크기가 10이면 0.7fa로 입력하면 했던 minimumScaleFactor것과 동일한 작업을 수행해야합니다 minimumFontSize.


그게 내가 생각했던 것입니다. 근데 0.1f로 입력해도 텍스트의 크기가 조정되지 않습니다. uilabel 코드를 추가하겠습니다.
Padin215 2013

제약 조건을 제거하고 레이블의 프레임을 축소하면 어떨까요?
kovpas

9
Log139 : 당신의 numberOfLines 설정은 무엇입니까? Apple의 문서에 따르면 minimumScaleFactor는 numberOfLines가 1로 설정된 경우에만 작동합니다. 0 또는 1보다 큰 것은 작동하지 않습니다.
SeanK 2013-08-02

1
그것은 numberOfLines가 1 개 이상으로 설정되어있는 경우에도 작동합니다 @SeanK하지만 0
Asadullah 알리

12

다른 답변 외에도 초보자에게 도움이되는 설명을 추가하겠습니다.

계산하는 방법 minimumScaleFactor? 레이블의 최소 글꼴 크기를 레이블의 기본 글꼴 크기로 나눕니다. 예를 들어, 기본 글꼴 크기는 25입니다. 최소 글꼴 크기는 10입니다.

10/25 = 0.4

0.4는 당신의 minimumScaleFactor가치입니다. 위의 @Jsdodgers의 답변도 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.