2013-02-01 2 views
98

Ho già usato minimumFontSize ma questa funzione è ora deprecata e non capisco come funziona minimumScaleFactor.Come funziona un MinimumScaleFactor di UILabel?

voglio la dimensione massima del carattere per essere 10 e il minimo da 7.

Come posso ottenere la ri-size verso il basso per la 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]; 

risposta

20

Secondo il documentation:

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

Quindi, se le dimensioni per l'etichetta font di default è 10, si mette 0.7f come minimumScaleFactor e dovrebbe fare la stessa cosa che ha fatto minimumFontSize.

+0

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

+0

Cosa succede se si rimuovono i vincoli e si riduce la cornice dell'etichetta? – kovpas

+8

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

178

è necessario impostare il label.adjustsFontSizeToFitWidth = YES;

+0

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

+19

In realtà non risponde alla domanda iniziale .. – beryllium

+10

Nota: "La documentazione di Apple dice che minimumScaleFactor funziona solo se numberOfLines è impostato su 1.Usare 0 o qualsiasi cosa maggiore di 1 non funzionerà. "Grazie SeanK. – samthui7

102

In aggiunta a ciò che dicono le altre risposte, se si mette minSize/DefaultSize (divisione) come minimumScaleFactor, sarà lo stesso che utilizzare il vecchio minimumFontSize.

Ex, se si desidera che la dimensione minima dei caratteri per essere 10 con dimensioni della etichetta di default, si può fare:

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

(Sostituire [UIFont labelFontSize] con la dimensione del carattere del marchio, se non è l'impostazione predefinita).

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

+0

la divisione dovrebbe essere castato come CGFloat, altrimenti non funzionerebbe – dwery

+0

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

+0

hai ragione, dovrebbe lavoro. Non riesco a ricordare in quale codice non ha funzionato, probabilmente mancava il punto o il punto. – dwery

5

In aggiunta alle altre risposte, ho intenzione di aggiungere una spiegazione principiante-friendly che mi ha aiutato:

Come calcolare un minimumScaleFactor? Dividi la dimensione minima del carattere della tua etichetta in base alla dimensione del carattere predefinito della tua etichetta. Ad esempio, la dimensione del font di default è 25. La dimensione minima dei caratteri è 10.

10/25 = 0,4

0,4 è il vostro valore minimumScaleFactor. Vedi anche la risposta di @ Jsdodgers sopra.