Ответ 1
Используйте пространство без разрыва (\ u00a0) ex: @"hello**\u00a0**world!"
post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];
U + 00A0/свободное пространство/общий разделитель, пробел
Есть ли способ использовать неперерывные пробелы в тексте UILabel?
Например, у меня есть метка с 2 строками и режим прерывания строки, установленный на перенос слов. Содержимое этой метки считывается из базы данных, где хранится в виде строки. Теперь иногда мой текст в ярлыке выглядит следующим образом:
lorem ipsum some text
1
но я хочу показать его так:
lorem ipsum some
text 1
так что, мне нужно заставить не разбивать пространство между "текстом" и "1".
Я нашел какое-то решение здесь, но я думаю, что он может работать, когда текст вводится в файл исходного кода. В моем случае текст находится в базе данных.
Любые предложения?
Используйте пространство без разрыва (\ u00a0) ex: @"hello**\u00a0**world!"
post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];
U + 00A0/свободное пространство/общий разделитель, пробел
Для Swift:
let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
let sentencewithnbsp = String(map(sentence.generate()) {
$0 == " " ? "\u{00a0}" : $0
})
Если вы хотите заставить это работать в файле .strings, вы можете ввести OPTION + SPACE вместо обычного пространства.
.strings файлы обычно кодируются в кодировке UTF-8, поэтому, если вы откроете его в представлении Hex, вместо специального символа пробела вы увидите "C2 A0".
В Inspector задано количество строк для метки как 3 или 4. Что вам потребуется. Затем содержимое будет отображаться в нескольких строках.
Возможно, вам понадобится реализовать пользовательскую функцию обертывания слов.
// pseudo-code
instring;
get len(instring)
if len > textedit.width*charFontSize
for (textedit.width*charFontSize ) // cycle through string
insert `\n` into inString at shortest whitespace
или что-то в этом роде.
Я не думаю, что это простой способ сделать это с UILabel. Конечно, одним из способов достижения такого же эффекта является вручную вставить "\n"
до <text"
в ваш пример. Другой вариант - использовать UIWebView со статическим HTML вместо UILabel, так что вы можете использовать фактический  
.
Если это не произойдет часто, вы можете сделать это:
NSString *string = @"lorem ipsum some \ntext 1";
label.text = string;
Вы можете динамически генерировать, где вы помещаете \n, используя количество символов, количество слов и т.д....
Здесь быстрое расширение для фиксации сироты в строке путем замены последнего пространства неразрывным пространством:
extension String {
var replacingLastSpace: String {
if let lastSpace = range(of: " ", options: .backwards, locale: .current) {
return replacingCharacters(in: lastSpace, with: "\u{00a0}")
}
return self
}
}
Хотя примечание с iOS 11, UILabels автоматически разрешает эту проблему.