Можно ли автоматически изменить размер поля / границ UILabel, чтобы оно соответствовало содержанию текста? (Мне все равно, если он окажется больше, чем дисплей)
Так что, если пользователь вводит «привет» или «мое имя действительно длинное, я хочу, чтобы оно вписывалось в это поле», оно никогда не будет усечено, а метка соответственно «расширена»?
ios
iphone
objective-c
uilabel
wayneh
источник
источник
Ответы:
Пожалуйста, проверьте мою суть, где я сделал категорию для
UILabel
чего-то очень похожего, моя категория позволяетUILabel
растянуть ее высоту, чтобы показать весь контент: https://gist.github.com/1005520Или проверить этот пост: https://stackoverflow.com/a/7242981/662605
Это растянет высоту, но вы можете легко изменить ее, чтобы работать по-другому, и растянуть ширину примерно так: я верю, что вы хотите сделать:
Вы можете более просто использовать
sizeToFit
метод, доступный вUIView
классе, но установить количество строк равным 1, чтобы быть безопасным.обновление iOS 6
Если вы используете AutoLayout, то у вас есть встроенное решение. Установив количество строк равным 0, каркас будет соответствующим образом изменять размер вашей метки (добавляя больше высоты), чтобы соответствовать вашему тексту.
обновление iOS 8
sizeWithFont:
устарела, поэтому используйтеsizeWithAttributes:
вместо:источник
Использование
[label sizeToFit];
достигнет того же результата из категории Daniels.Хотя я рекомендую использовать autolayout и позволить метке самому изменяться в зависимости от ограничений.
источник
Если мы этого хотим
UILabel
уменьшалось и расширялось в зависимости от размера текста, тогда раскадровка с автопоставкой является лучшим вариантом. Ниже приведены шаги для достижения этой цели.меры
Поместите UILabel в поле зрения контроллера и разместите его там, где вы хотите. Также положить
0
наnumberOfLines
имуществоUILabel
.Дайте ему ограничение Top, Leading и Trailing space.
Update Frame
и нажмитеFix Misplacement
. Теперь эта UILabel будет уменьшаться, если текст меньше, и расширяется, если текст больше.источник
Это не так сложно, как делают некоторые другие ответы.
Прикрепите левый и верхний края
Просто используйте автоматическое расположение, чтобы добавить ограничения, чтобы закрепить левую и верхнюю стороны надписи.
После этого он автоматически изменит размер.
Ноты
Не нужно устанавливать
sizeToFit
при использовании автоматического макета. Мой полный код для примера проекта здесь:myLabel.preferredMaxLayoutWidth = 150 // or whatever
код. (Я также прикрепил кнопку к нижней части этикетки, чтобы она могла двигаться вниз при увеличении высоты этикетки.)UITableViewCell
посмотрите этот ответ .источник
Используйте
[label sizeToFit];
для настройки текста в UILabelисточник
Я создал несколько методов, основанных на ответе Даниила выше.
источник
Вот что я нахожу работы для моей ситуации:
1) Высота UILabel имеет ограничение> = 0, используя autolayout. Ширина фиксирована. 2) Присвойте текст в UILabel, у которого уже есть супервизия (не уверен, насколько это важно). 3) Затем выполните:
Высота метки теперь установлена соответствующим образом.
источник
Это метод категории. Вы должны сначала установить текст, а затем вызывать этот метод для настройки высоты UILabel.
источник
Вы можете изменить размер этикетки в соответствии с текстом и другими связанными элементами управления двумя способами:
Для iOS 7.0 и выше
до iOS 7.0 это можно было использовать для расчета размера этикетки
// переоснащаем другие элементы управления на основе labelTextHeight
Если вы не хотите вычислять размер текста надписи, вы можете использовать -sizeToFit в экземпляре UILabel as-
// после этого вы можете получить рамку метки для перефразирования других связанных элементов управления
источник
[label sizeToFit];
в viewDidLoadисточник
У меня были огромные проблемы с авторазборкой. У нас есть два контейнера внутри ячейки таблицы. Размер второго контейнера изменяется в зависимости от описания элемента (0–1000 символов), и размер строки должен изменяться в зависимости от них.
Недостающий ингредиент был нижним ограничением для описания.
Я изменил нижнее ограничение динамического элемента с = 0 на > = 0 .
источник
Подходит каждый раз! :)
источник
Вы можете показать вывод одной строки, затем установить свойство Line = 0 и показать вывод нескольких строк, а затем установить свойство Line = 1 и более
источник
Есть также такой подход:
источник
changeTextWithAutoHeight:width:
методUILabel
. Не могли бы вы предоставить ссылку, пожалуйста, где в документации UIKit этот метод можно найти.