Как динамически изменять размер шрифта в auto layout iOS?

Я хочу поместить свой текст в UILabel, но для разных iPhone размер UILabel меняется, так как я использую auto layout, но я не могу исправить размер шрифта, поэтому мой текст вырезается.

есть ли способ установить любое ограничение, чтобы текст соответствовал UILabel динамически?

см. здесь текст был вырезан из-за различного разрешения экрана

3 ответов


вы должны использовать autoshrink.

Так как все айфоны имеют то же самое Compact width класс размера в портретном режиме вы не можете полагаться на это для обработки размера метки.


превью для iPhone5, iPhone6 и iPhone 6+

enter image description here

в инспекторе вы должны выбрать минимальный масштаб шрифта или минимальный размер шрифта перед Autoshrink. Это позволяет контенту изменять размер шрифта в соответствии с этикетка.

здесь я устанавливаю минимальный масштаб шрифта на 0,5, поэтому минимальный размер составляет половину текущего размера (31.0). Текст будет пытаться соответствовать, пока не достигнет минимального масштаба / размера.

(обычно не используйте для этой цели" затянуть интервал между буквами". Tighten letter spacing использует тот же размер шрифта и уменьшает расстояние между буквами. Он может сделать ярлык от 2% до 5% более плотным перед усекать, но он не эффективен когда минимальные масштаб/размер шрифта включен.)


вы можете протестировать с помощью широкоэкранного устройства, такого как iPad Pro, а также на меньшем экране, таком как iPhone 4S.

Autoshrink не будет регулировать размер шрифта больше, чем тот, который установлен на этикетке, это означает, что если вы сделаете метку той же ширины, что и экран, но оставьте размер шрифта 14, он попытается увеличить размер шрифта, пока не достигнет этого размера.

сделать это фактически работа, выберите большой размер шрифта.

вы все еще можете комбинировать autoshrink с классами размера, чтобы изменить максимальный размер шрифта в зависимости от устройства/ориентации.


В случае, если вы хотите использовать autoshrink С UIButtons, вы все еще можете установить это с помощью двух строк кода.

myButton.titleLabel.minimumScaleFactor = 0.5;
myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

Привет если вы добавляете UILabel из раскадровки, вы можете установить другой шрифт для всех доступных макетов.

enter image description here


вы можете сделать это, используя классы размеров. каждый размер дисплея используя класс размера, это приведет к в 4 абстрактных приборах: регулярная ширина-регулярная Высота, регулярная ширина-компактная Высота, компактная ширина-регулярная высота и компактная ширина-компактная Высота. В таблице ниже показаны устройства iOS и соответствующие им классы размеров.  enter image description here

чтобы задать размер шрифта для данного класса размеров, сначала выберите UILabel. В инспекторе атрибутов, вы должна появиться кнопка плюс (+) рядом с полем шрифта. Нажмите кнопку + и выберите Compact Width > Regular Height (или согласно вашему требованию выберите width & Height). ​ После этого вы увидите новую запись для опции шрифта, который предназначен для конкретного класса. Сохраните размер нетронутым для исходного варианта шрифта, но измените размер поля шрифта wC hR (или согласно вашему выбору) на необходимые точки (например, 14).

enter image description here