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

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

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

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

Ответ 1

Вы должны использовать автоусадку.

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


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

enter image description here

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

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

(Как правило, для этой цели не используйте "Сократить межбуквенный интервал". Сокращенный межбуквенный интервал использует тот же размер шрифта и уменьшает интервал между буквами. Это может сделать метку на 5% плотнее перед усечением, но неэффективно при минимальном масштабе шрифта/размер включен.)


Возможно, вы захотите провести тестирование на широкоэкранном устройстве, таком как iPad Pro, а также на меньшем экране, например iPhone 4S. Хорошей практикой является тестирование с различными размерами шрифтов пользовательских систем, вы можете установить их в Settings> General> Accessibility> Larger Text.

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

Чтобы это работало, выберите большой размер шрифта.

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


Если вы хотите использовать автоусадку с UIButton s, вы все равно можете установить это поведение с двумя строками кода.

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

Ответ 2

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

enter image description here

Ответ 3

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

Чтобы установить размер шрифта для этого конкретного размера, сначала выберите UILabel. Под инспектором Атрибутов вы должны увидеть кнопку плюс (+) рядом с полем шрифта. Нажмите кнопку + и выберите "Компактная ширина"> "Обычная высота" (или в соответствии с вашими требованиями выберите "Ширина и высота"). Затем вы увидите новую запись для опции "Шрифт", которая посвящена этому конкретному классу размера. Оставьте размер неизменным для исходной опции "Шрифт", но измените размер поля шрифта wC hR (ИЛИ согласно вашему выбору) на требуемые точки (например, 14).

enter image description here