Como funciona o minimumScaleFactor de um UILabel?


109

Eu usei minimumFontSizeantes, mas essa função agora está obsoleta e não entendo muito bem como minimumScaleFactorfunciona.

Eu quero que o tamanho máximo da fonte seja 10 e o mínimo seja 7.

Como posso redimensionar para o tamanho da fonte 7 com o fator de escala?

UILabel criação:

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];

Respostas:


204

Você precisa definir o label.adjustsFontSizeToFitWidth = YES;


1
Perfeito, isso é o que estava faltando em meu próprio código. Obrigado: D
— Fogmeister

14
Nota: "A documentação da Apple diz que o minimumScaleFactor só funciona se numberOfLines for definido como 1. Usar 0 ou qualquer coisa maior que 1 não funcionará." . Obrigado SeanK.
— samthui7

Impressionante! Engraçado que, se você definir minumScaleFactor no XIB, não precisará definir adjustsFontSizeToFitWidth, mas precisará ao fazer no código.
— Politta,

104

Além do que dizem as outras respostas, se você colocar minSize / defaultSize (division) como o minimumScaleFactor, será o mesmo que usar o antigo minimumFontSize.

Por exemplo, se você deseja que o tamanho mínimo da fonte seja 10 usando o tamanho de etiqueta padrão, você pode fazer:

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

(Substitua [UIFont labelFontSize]pelo tamanho da fonte da etiqueta se não for o padrão).

que seria o mesmo que: [label setMinimumFontSize:10.0];


a divisão deve ser lançada como CGFloat, caso contrário não funcionaria
— quase

@dwery Fazer 10 / labelSize pode terminar com um valor inteiro truncado de 0, mas 10.0 ou 10.f funcionam bem, sem conversão explícita.
— Kalle

você está certo, deve funcionar. Não me lembro em qual código não funcionou para mim, provavelmente estava faltando o f ou o ponto.
— Dwery

20

De acordo com a documentação :

Use esta propriedade para especificar o menor multiplicador para o tamanho da fonte atual que produz um tamanho de fonte aceitável para usar ao exibir o texto do rótulo. Se você especificar um valor de 0 para esta propriedade, o tamanho da fonte atual é usado como o menor tamanho de fonte.

Portanto, se o tamanho da fonte padrão para a sua etiqueta for 10, coloque 0.7fcomo um minimumScaleFactore ele deve fazer a mesma coisa que minimumFontSizefez.


Isso é o que eu pensei também; mas mesmo quando coloco como 0.1f, o texto não ajusta o tamanho. vou adicionar o código uilabel.
— Padin215 01 de

E se você remover as restrições e apenas reduzir a moldura do rótulo?
— kovpas 01 de

9
Log139: Qual é o seu numberOfLines definido? A documentação da Apple diz que o minimumScaleFactor só funciona se numberOfLines for definido como 1. Usar 0 ou qualquer coisa maior que 1 não funcionará.
— SeanK

1
@SeanK Funcionará mesmo se numberOfLines for definido como mais de 1, mas NÃO 0.
— Asadullah Ali

12

Além de outras respostas, vou adicionar uma explicação amigável para iniciantes que me ajudou:

Como calcular um minimumScaleFactor? Divida o tamanho mínimo da fonte da etiqueta pelo tamanho da fonte padrão da etiqueta. Por exemplo, o tamanho da fonte padrão é 25. O tamanho mínimo da fonte é 10.

10/25 = 0,4

0,4 é o seu minimumScaleFactorvalor. Veja também a resposta de @Jsdodgers acima.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.