web-dev-qa-db-fra.com

Comment fonctionne minimumScaleFactor d'un UILabel?

J'ai déjà utilisé minimumFontSize mais cette fonction est maintenant obsolète et je ne comprends pas très bien comment fonctionne minimumScaleFactor.

Je veux que la taille de police maximale soit 10 et que la taille minimale soit 7.

Comment puis-je obtenir le redimensionnement jusqu'à la taille de police 7 avec le facteur d'échelle?

UILabel creation:

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

Vous devez définir le label.adjustsFontSizeToFitWidth = YES;

194
Scott

En plus de ce que les autres réponses disent, si vous mettez minSize/defaultSize (division) en tant que minimumScaleFactor, ce sera la même chose que si vous utilisiez l'ancien minimumFontSize.

Par exemple, si vous voulez que la taille de police minimale soit 10 en utilisant la taille d'étiquette par défaut, vous pouvez faire:

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

(Remplacez [UIFont labelFontSize] avec la taille de police de votre étiquette si ce n'est pas la valeur par défaut).

ce qui serait la même chose que: [label setMinimumFontSize:10.0];

103
Jsdodgers

Selon le documentation :

Utilisez cette propriété pour spécifier le plus petit multiplicateur de la taille de police actuelle qui donne une taille de police acceptable à utiliser lors de l’affichage du texte de l’étiquette. Si vous spécifiez une valeur de 0 pour cette propriété, la taille de police actuelle est utilisée comme taille de police la plus petite.

Donc, si la taille de police par défaut de votre étiquette est 10, tu mets 0.7f comme minimumScaleFactoret il devrait faire la même chose que minimumFontSize.

20
kovpas

En plus d'autres réponses, je vais ajouter une explication conviviale pour les débutants qui m'a été utile:

Comment calculer un minimumScaleFactor? Divisez la taille de police minimale de votre étiquette par la taille de police par défaut de votre étiquette. Par exemple, votre taille de police par défaut est 25. Votre taille de police minimale est 10.

10/25 = 0,4

0,4 est votre valeur minimumScaleFactor. Voir également la réponse de @ Jsdodgers ci-dessus.

10
AVog