Come funziona il minimumScaleFactor di UILabel?


109

L'ho usato minimumFontSizeprima ma quella funzione è ora deprecata e non capisco bene come funzioni minimumScaleFactor.

Voglio che la dimensione massima del carattere sia 10 e quella minima 7.

Come posso ottenere il ridimensionamento fino alla dimensione del carattere 7 con il fattore di scala?

UILabel creazione:

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

Risposte:


204

Devi impostare il file label.adjustsFontSizeToFitWidth = YES;


1
Perfetto, questo è quello che mi mancava nel mio codice. Grazie: D
Fogmeister

14
Nota: "La documentazione di Apple dice che il minimumScaleFactor funziona solo se numberOfLines è impostato su 1. L'uso di 0 o un valore maggiore di 1 non funzionerà." . Grazie SeanK.
samthui7

Eccezionale! È buffo che se imposti minumumScaleFactor nello XIB non hai bisogno di impostare AdjustsFontSizeToFitWidth, ma ti serve quando fai nel codice.
Politta

104

Oltre a ciò che dicono le altre risposte, se metti minSize / defaultSize (divisione) come minimumScaleFactor, sarà come usare il vecchio minimumFontSize.

Ad esempio, se desideri che la dimensione minima del carattere sia 10 utilizzando la dimensione dell'etichetta predefinita, puoi fare:

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

(Sostituisci [UIFont labelFontSize]con la dimensione del carattere dell'etichetta se non è l'impostazione predefinita).

che sarebbe lo stesso di: [label setMinimumFontSize:10.0];


la divisione dovrebbe essere lanciata come CGFloat, altrimenti non funzionerebbe
dwery

@dwery Facendo 10 / labelSize può finire con un valore intero troncato di 0 ma 10.0 o 10.f funzionano bene, senza cast esplicito.
Kalle

hai ragione, dovrebbe funzionare. Non ricordo in quale codice non ha funzionato per me, probabilmente mancava la fo il punto.
dwery

20

Secondo la documentazione :

Utilizzare questa proprietà per specificare il più piccolo moltiplicatore per la dimensione del carattere corrente che restituisce una dimensione del carattere accettabile da utilizzare durante la visualizzazione del testo dell'etichetta. Se si specifica un valore di 0 per questa proprietà, la dimensione del carattere corrente viene utilizzata come dimensione del carattere più piccola.

Quindi, se la dimensione del carattere predefinita per la tua etichetta è 10, metti 0.7fcome a minimumScaleFactore dovrebbe fare la stessa cosa di minimumFontSize.


Questo è quello che ho pensato anche io; ma anche quando lo metto come 0.1f, il testo non regola le dimensioni. aggiungerò il codice uilabel.
Padin215

Cosa succede se rimuovi i vincoli e riduci semplicemente la cornice dell'etichetta?
kovpas

9
Log139: su cosa è impostato il tuo numberOfLines? La documentazione di Apple dice che il minimumScaleFactor funziona solo se numberOfLines è impostato su 1. L'uso di 0 o qualcosa di maggiore di 1 non funzionerà.
SeanK

1
@SeanK Funzionerà anche se numberOfLines è impostato su più di 1 ma NON su 0.
Asadullah Ali

12

Oltre ad altre risposte, aggiungerò una spiegazione per principianti che mi ha aiutato:

Come calcolare un minimumScaleFactor? Dividi la dimensione minima del carattere dell'etichetta per la dimensione del carattere predefinita dell'etichetta. Ad esempio, la dimensione del carattere predefinita è 25. La dimensione minima del carattere è 10.

10/25 = 0,4

0.4 è il tuo minimumScaleFactorvalore. Vedi anche la risposta di @ Jsdodgers sopra.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.