Изменение размера шрифта метки в цикле не приводит к изменению размера текста

#ios #swift #fonts #uilabel

#iOS #swift #шрифты #uilabel

Вопрос:

У меня есть представление с 4 метками в нем, и иногда оно исчезает с экрана.

Чтобы избежать этого, я пытаюсь изменить размер текста метки следующим образом:

 while DefinitionAndExampleView.frame.maxY > view.frame.size.height {
    label1.font = UIFont.systemFont(ofSize: (label1.font.pointSize - 1))
    label2.font = UIFont.systemFont(ofSize: (label2.font.pointSize - 1))
    label3.font = UIFont.systemFont(ofSize: (label3.font.pointSize - 1))
    label4.font = UIFont.systemFont(ofSize: (label4.font.pointSize - 1))
}
 

Однако этот цикл while продолжает выполняться и никогда не завершается, потому что размер точки 4 меток не меняется.

Почему размеры точек меток не меняются?

Ответ №1:

Вы проверяете максимальное значение из фрейма DefinitonAndExampleView, также есть вероятность, что фреймы пересчитают его размер только после обновления пользовательского интерфейса. Я бы настоятельно рекомендовал вам использовать ограничения в ваших метках, чтобы они не исчезали с экрана. Вы можете ознакомиться с официальной документацией Apple, чтобы начать работу с ней.

Комментарии:

1. Не помогает — даже попытка без цикла и простое выполнение 4 строк кода один раз (в качестве теста) не имеет значения

2. Вам не нужно изменять размер вашего текста, вам просто нужно добавить ограничения автозапуска. Вы в основном сообщаете интерфейсу, что ваши метки не могут превзойти его superview. Вы должны установить для своих меток нужный размер и установить его Autoshrink на Minimum Font Scale

Ответ №2:

Если вы хотите убедиться, что ваши метки не исчезают с экрана, вы можете установить для параметра adjustFontSizeToFitWidth значение true . Таким образом, текст вашей метки не исчезнет с экрана, он просто изменит размер. Кроме того, добавьте ограничения для ширины, чтобы гарантировать, что ширина метки не будет увеличиваться.

label1.adjustsFontSizeToFitWidth = true

Комментарии:

1. Не помогает — метка содержит несколько строк текста