Разрешить UILabel динамически расти с помощью автоматического макета

У меня есть этикетка, на которой будет большое описание. Я хочу, чтобы лейбл продолжал развиваться по новым направлениям. На изображении это метка, которая начинается с event_venue ..... введите описание изображения здесь

Метка even_venue .. пока имеет 3 ограничения:

  1. Вертикальное пространство с eventt_title
  2. горизонтальное пространство с ведущей из супервизора
  3. ограничение ширины, которое определяет, что ширина метки всегда меньше, чем superview.width.

Я хочу добиться, чтобы event_venue.width был меньше superview.width, но если в нем больше текста, он должен отображаться в новых строках. Возможно ли это с использованием автопрокладки?


person Noor    schedule 24.04.2014    source источник
comment
Конечно, это возможно, но я бы на самом деле использовал UITextView с editable = NO;   -  person Sergey Grischyov    schedule 24.04.2014
comment
Просто нужно обнулить количество строк.   -  person Afnan    schedule 24.04.2014


Ответы (5)


Это возможные шаги, которые могут создать расширяемый UILabel

  1. Установить макеты для UILabel, фиксирующие его положение
  2. Установить количество строк = 0
  3. Установите сопротивление вертикальному сжатию содержимого на 1000 (это позволит тексту нажимать на этикетку).
  4. Поскольку вы хотите, чтобы UILabel расширялся, вы не можете дать ему ограничение фиксированной высоты или его родительское ограничение фиксированной высоты. Иногда, в зависимости от условия, необходимо задать ограничение по высоте, чтобы избежать ошибки, тогда вам нужно установить его приоритет ниже, чем сопротивление вертикальному сжатию.
person amar    schedule 02.11.2018

Да, это вполне возможно. Я вижу здесь ответы, которые близки к решению, но не полны. Вот решение, которое работает с автоматическим макетом в Storyboard, без кодирования sizeToFit или чего-то еще. Ваши измененные шаги будут:

  1. Вертикальное пространство с eventt_title
  2. Горизонтальное пространство с ведущей из супервизора
  3. Горизонтальное пространство с завершением супервизора
  4. Установите разрывы строк в UILabel как перенос по словам.
  5. Задайте для свойства lines UILabel значение 0.
person Piidro    schedule 09.06.2016

Решил аналогичную проблему. Мне пришлось сделать этикетку с переменным количеством текста. Вот что я сделал:

  • В раскадровке поместите метку с исходной точкой в ​​нужном месте.
  • В инспекторе атрибутов в разделе «Ярлык» установите «Разрывы строк» ​​= «Перенос слов».
  • Заполните этикетку произвольным текстом-заполнителем до желаемой максимальной формы. Например, если вы хотите заполнить всю ширину и иметь место максимум для трех строк текста, вы можете сделать:
    abcdefghijklmnopqrstu
    abcdefghijklmnopqrstu
    abcdefghijklmnopqrstu

  • В коде установите текст метки с помощью setText:
    [self.myLabel setText: @ "MyLabelText"];

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

person EdTech    schedule 24.04.2014

У меня был аналогичный вопрос об изменении размера метки, и ответ, который я нашел, который был мне полезен, находится здесь: UILabel Auto Size Label to Fit Text. Это хороший начальный исходный код для программного изменения размера метки.

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

person Doug Baker    schedule 24.04.2014

AutoLayout облегчить вам ориентацию. Я не думаю, что это даст вам автоматическое расширение. Вы должны полностью определить ширину метки with и height, иначе вы увидите точки в конце метки. Таким образом, вы можете использовать UITextView, растягивая его по всему экрану. И установите textView.backgroundcolot = clearColor.

person Macrosoft-Dev    schedule 24.04.2014