В UILabel можно ли заставить строку НЕ ломаться в определенном месте

У меня есть UILabel, который должен быть длиной в две строки. Текст локализован на французский и английский языки.

Я устанавливаю свойство attributedText метки. Текст построен из трех добавленных строк, например textFragment1, textFragment2 и textFragment3. Средняя строка - это изображение, созданное с помощью NSTextAttachment.

Я хочу, чтобы textFragment2 и textFragment3 находились в одной строке. Первая строка может или не может быть завершена в зависимости от того, как долго она будет. Проблема в том, что мой французский текст в настоящее время довольно короткий, поэтому строка завершается после textFragment2.

Я исправил это временно, добавив символ прерывания строки в локализованном французском тексте для textFragment1. Я действительно не люблю это решение. Мне было интересно, есть ли способ обработать textFragment2 и textFragment3, чтобы они всегда были вместе в одной строке.

Ответ 1

Вы можете использовать неразрывное пространство (\u00a0) для объединения textFragment2 и textFragment3. Этот персонаж выглядит как нормальное пространство, т.е. это приводит к тому же количеству пробелов, но разрыв строки не будет происходить по обе стороны от него.

Вы также можете использовать пространство с нулевой шириной (\u2060). Использование этого символа не приведет к каким-либо пробелам, но оно все равно предотвратит разрыв строки с обеих сторон. Это то, что вы хотите, если вам не нужно пространство между textFragment2 и textFragment3, но вы все равно хотите предотвратить разрыв строки. (Его также полезно, если у вас есть слово с дефисом посередине, но вы хотите, чтобы линия не была сломана после дефиса.)

Вы можете больше узнать об этих типах символов в Википедии.