UILabel - Wordwrap текст

150

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

Codezy
источник

Ответы:

301

Если вы установите numberOfLinesзначение 0 (и метка для переноса по словам), метка будет автоматически переноситься и использовать столько строк, сколько необходимо.

Если вы редактируете UILabelв IB, вы можете ввести несколько строк текста, нажав option+, return чтобы получить разрыв строки - returnтолько редактирование закончится.

Кендалл Хельмштеттер Гелнер
источник
124
Чтобы уточнить для таких нубов, как я, это будет: cell.textLabel.numberOfLines = 0; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
Брайан Мескау
46
В iOS 6 и новее пользуйтесь NSLineBreakByWordWrapping, а не UILineBreakModeWordWrap.
Аарон Брагер,
3
Вам также может понадобиться следующее: label.autoresizingMask = UIViewAutoresizingF FlexibleHeight;
Уильям Гранд
6
label.lineBreakMode = .ByWordWrappingи label.numberOfLines = 0по-быстрому
AFraser
9
Для тех, кому это было неочевидно (например, мне): UILabel должен иметь какое-то ограничение на его ширину (либо из фактического ограничения ширины, либо из ограничения полей); иначе это не обернется.
jcady
27

UILabelимеет свойство, lineBreakModeкоторое вы можете установить согласно вашему требованию.

Greg
источник
11
Msgstr "У меня разрывы строк установлены на перенос слов". Это только переносит фактические разрывы строк, оно не будет автоматически прерываться, если оно будет длинным.
Codezy
19

В Swift вы бы сделали это так:

    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.numberOfLines = 0

(Обратите внимание, что константа lineBreakMode работает иначе, чем в ObjC)

Натан
источник
Хотите уточнить, как это отличается?
Майк
Я думаю, я имел в виду только то, что наименование отличается. Это, вероятно, снова изменилось в swift3
Натан
Режим
перевода
@MobileMonin мой опыт, который не всегда так. Может быть, IB меняет это в некоторых обстоятельствах?
Натан,
label.lineBreakMode = NSLineBreakByWordWrapping в Obj C
Нупур Шарма
2

Xcode 10, Swift 4

Обтекание текста для метки также можно выполнить на раскадровке, выбрав «Метка» и используя инспектор атрибутов.

Строки = 0 LineBreak = Word Wrap

введите описание изображения здесь

Naishta
источник
2
Используя ярлык branBrand-New, добавляя его непосредственно в представление, он все равно генерирует однострочный ярлык (с шириной, превышающей ширину телефона) для меня, несмотря на то, что для строк установлено значение 0, а для переноса строк - Word Wrap. Есть ли другая настройка, которая может потребоваться? Нужно ли прикреплять дополнительный код?
phihag