Представьте, что у меня есть следующий текст в UILabel
(длинная строка динамического текста):
Так как армия инопланетян значительно превосходит численность команды, игроки должны использовать постапокалиптический мир в своих интересах, таких как поиск укрытия за мусорными контейнерами, колоннами, машинами, обломками и другими объектами.
Я хочу изменить UILabel's
высоту, чтобы текст мог поместиться. Я использую следующие свойства, UILabel
чтобы сделать текст внутри для переноса.
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Пожалуйста, дайте мне знать, если я не иду в правильном направлении. Спасибо.
ios
cocoa-touch
uikit
uilabel
Мустафа
источник
источник
Ответы:
sizeWithFont constrainedToSize:lineBreakMode:
это метод для использования. Пример того, как использовать это ниже:источник
[label sizeToFit]
.sizeWithFont
это не рекомендуется в iOS 7. stackoverflow.com/questions/18897896/…Вы шли в правильном направлении. Все, что вам нужно сделать, это:
источник
В iOS 6 Apple добавила свойство в UILabel, которое значительно упрощает динамическое вертикальное изменение размера меток: предпочитается MaxLayoutWidth .
Использование этого свойства в сочетании с lineBreakMode = NSLineBreakByWordWrapping и методом sizeToFit позволяет легко изменять размер экземпляра UILabel до высоты, в которой помещается весь текст.
Цитата из документации iOS:
Образец:
источник
Проверьте эту работу отлично, без добавления одной строки кода. (Используя Autolayout)
Я сделал демо для вас по вашему требованию. Скачать его по ссылке ниже,
Авторазмер UIView и UILabel
Пошаговое руководство: -
Шаг 1: - Установите ограничение на UIView
1) Ведущий 2) Топ 3) Трейлинг (Из основного обзора)
Шаг 2: - Установите ограничение на метку 1
1) Ведущий 2) Топ 3) Трейлинг (Из супер-просмотра)
Шаг 3: - Установите ограничение на метку 2
1) Ведущий 2) Трейлинг (Из супер-просмотра)
Шаг 4: - Сложнее всего дать Боттону UILabel из UIView.
Шаг 5: - (Необязательно) Установите ограничение на UIButton
1) Ведущий 2) Низ 3) Трейлинг 4) Фиксированная высота (из основного обзора)
Вывод :-
Примечание: - Убедитесь, что вы установили Number of lines = 0 в свойстве Label.
Я надеюсь, что этой информации достаточно, чтобы понять Autoresize UIView в соответствии с высотой UILabel и Autoresize UILabel в соответствии с текстом.
источник
Вместо того, чтобы делать это программно, вы можете сделать это в Storyboard / XIB во время проектирования.
источник
Спасибо, ребята, за помощь, вот код, который я пробовал, который работает для меня
источник
Решение для iOS7 до и iOS7 выше
источник
Поскольку sizeWithFont устарела, я использую этот.
этот получает специфичные для метки атрибуты.
источник
Вот версия категории:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
источник
Вы можете реализовать
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
метод следующим образом (например):Кроме того, использование
NSString
«ssizeWithFont:constrainedToSize:lineBreakMode:
метода вычисления высоты текста.источник
Расширение UILabel на основе этого ответа для Swift 4 и выше
Может использоваться как:
источник
А для тех, кто мигрирует на iOS 8, вот расширение класса для Swift:
источник
Самым простым и лучшим способом, который работал для меня, было применение ограничения высоты к метке и установка приоритета на низкий , то есть (250) в раскадровке.
Так что вам не нужно беспокоиться о программном расчете высоты и ширины благодаря раскадровке.
источник
Мой подход к вычислению динамической высоты UILabel.
Обернуть, чтобы функционировать:
источник
Обновленный метод
источник
Это одна строка кода для получения высоты UILabel с помощью Objective-c:
и используя .height вы получите высоту метки следующим образом:
источник
Вы можете получить высоту, используя код ниже
Вы должны пройти
текст 2. шрифт 3. ширина метки
источник
Спасибо за этот пост. Это мне очень помогло. В моем случае я также редактирую текст в отдельном контроллере представления. Я заметил, что когда я использую:
в tableView: cellForRowAtIndexPath: метод, чтобы представление метки постоянно отображалось поверх предыдущего представления каждый раз, когда я редактировал ячейку. Текст стал пикселированным, и когда что-то было удалено или изменено, предыдущая версия была видна под новой версией. Вот как я решил проблему:
Нет больше странных слоев. Если есть лучший способ справиться с этим, пожалуйста, дайте мне знать.
источник
используйте здесь все свойства, используемые на метке, и проверьте это, увеличив текст в itemTitle.text как
он покажет ответ perfetc, как вам нужно
источник
Вы также можете использовать его как метод. @Pyjamasam очень верный, поэтому я просто делаю его метод. Это может быть полезно для кого-то еще
и просто установите это так
источник
Для этого в Swift3 следующий код:
источник
Добавление к ответам выше:
Это может быть легко достигнуто через раскадровку.
источник
Одна строка Криса ответ неверен.
должно быть
Кроме этого, это правильное решение.
источник
Наконец-то это сработало. Спасибо вам, ребята.
Я не получил его на работу, потому что я пытался изменить размер метки в
heightForRowAtIndexPath
методе:и (да, глупый я), я изменил метку к
cellForRowAtIndexPath
методу по умолчанию в методе - я пропустил код, который я написал ранее:источник
источник
источник
Мой код:
источник
Этот метод даст идеальную высоту
источник
Свифт 2:
Интересные строки
sizeToFit()
в сочетании с установкойframe.size.height
максимального значения с плавающей точкой, это даст место для длинного текста, ноsizeToFit()
заставит его использовать только необходимое, но ВСЕГДА вызывать его после установки.frame.size.height
.Я рекомендую установить
.backgroundColor
для целей отладки, таким образом, вы можете видеть, что кадр отображается для каждого случая.источник
yourLabel.frame.height
собственность только для полученияПожалуйста, установите ограничения для UILable в раскадровке, включая верхний левый нижний правый
источник