Як працює мінімальний ScaleFactor UILabel?


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 говорить, що minimScaleFactor працює, лише якщо числоOfLines встановлено на 1. Використання 0 або нічого більшого від 1 не буде працювати." . Спасибі SeanK
samthui7

Дивовижно! Смішно, що якщо ви встановили minumumScaleFactor у XIB, вам не потрібно встановлювати налаштуванняFostntSizeToFitWidth, але це потрібно при виконанні коду.
Політта

104

На додаток до того, що кажуть інші відповіді, якщо ви ставите minSize / defaultSize (поділ) як minimumScaleFactor, це буде те саме, що і використовувати стару minimumFontSize.

Наприклад, якщо ви хочете, щоб мінімальний розмір шрифту дорівнював 10, використовуючи стандартний розмір мітки, ви можете зробити:

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

(Замініть [UIFont labelFontSize]розміром шрифту мітки, якщо він не є типовим).

що було б те саме: [label setMinimumFontSize:10.0];


дивізіон повинен бути зафіксований як CGFloat, інакше він не спрацює
dwery

@dwery Doing 10 / labelSize може закінчитися усіченим цілим значенням 0, але 10,0 або 10.f справно, без явного введення.
Калле

ти маєш рацію, це має працювати. Я не можу пригадати, в якому коді він не працював для мене, ймовірно, у ньому відсутня f або крапка.
деурі

20

Відповідно до документації :

Використовуйте це властивість, щоб вказати найменший множник для поточного розміру шрифту, який дає прийнятний розмір шрифту, який слід використовувати під час відображення тексту мітки. Якщо для цього властивості вказано значення 0, поточний розмір шрифту використовується як найменший розмір шрифту.

Отже, якщо розмір шрифту за типовою для вашої мітки є 10, ви ставите 0.7fяк, minimumScaleFactorі він повинен робити те саме, що minimumFontSizeі ви.


Ось що я думав також; але навіть коли я ставлю це як 0,1f, текст не регулює розмір. я додам код uilabel.
Padin215

Що робити, якщо ви усунете обмеження та просто зменшите рамку мітки?
ковпас

9
Log139: Для чого встановлено ваш номерOfLines? Документація Apple говорить, що minimScaleFactor працює лише в тому випадку, якщо числоOfLines встановлено на 1. Використання 0 або нічого більшого від 1 не буде працювати.
SeanK

1
@SeanK Він буде працювати, навіть якщо числоOfLines встановлено більше ніж 1, а НЕ 0.
Асадулла Алі

12

На додаток до інших відповідей я збираюся додати пояснення для початківців, яке допомогло мені:

Як обчислити minimumScaleFactor? Розділіть мінімальний розмір шрифту мітки на шрифт за замовчуванням. Наприклад, ваш шрифт за замовчуванням становить 25. Ваш мінімальний розмір шрифту - 10.

10/25 = 0,4

0,4 - це ваше minimumScaleFactorзначення. Дивіться також відповідь @ Jsdodgers вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.