Подтвердить что ты не робот

UILabel неправильно переносит слова в iOS 11

У меня проблема с приложением с использованием XIB без автозапуска. Я не знаю, важна ли эта информация.

У меня есть UILabel с 2 строками, используя перенос слов. В iOS 10 обертка слов работала правильно, а первая строка содержала одно слово + специальный символ, например амперсанд. Пример:

UiLabel on ios 10

Затем на iOS 11 перенос слов работает как-то неправильно и помещает ampresand во вторую строку:

UiLabel on ios 11

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

Остальные настройки: инспектор размера

4b9b3361

Ответ 1

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

Удивительно, что нет никакой документации или способа отключить это поведение.

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

Также здесь хорошая статья о "овдовевшем" и "потерянном тексте".

Ответ 2

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

два UILabels

Оба эти UILabels имеют одинаковые ограничения ширины, и текст почти идентичен. Но второй имеет слово wrap, которого я ожидал бы. Первое неверно, "about" может явно оставаться на первой строке.

Ответ 3

Кажется, что замена пространства перед амперсандом с неразрывным пространством (U + 00A0) удерживает амперсанд в одной строке. В зависимости от того, как вы генерируете текст для метки, это может быть нелегко автоматизировать (возможно, вам действительно нужен амперсанд, который будет во второй строке в некоторых случаях).