#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. Не помогает — метка содержит несколько строк текста