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

IPhone UILabel - без разрыва

Есть ли способ использовать неперерывные пробелы в тексте UILabel?

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

lorem ipsum some text
1

но я хочу показать его так:

lorem ipsum some
text 1

так что, мне нужно заставить не разбивать пространство между "текстом" и "1".

Я нашел какое-то решение здесь, но я думаю, что он может работать, когда текст вводится в файл исходного кода. В моем случае текст находится в базе данных.

Любые предложения?

4b9b3361

Ответ 1

Используйте пространство без разрыва (\ u00a0) ex: @"hello**\u00a0**world!"

post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];

U + 00A0/свободное пространство/общий разделитель, пробел

from: http://en.wikipedia.org/wiki/Whitespace_character

Ответ 2

Для Swift:

let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
let sentencewithnbsp = String(map(sentence.generate()) {
    $0 == " " ? "\u{00a0}" : $0
})

Ответ 3

Если вы хотите заставить это работать в файле .strings, вы можете ввести OPTION + SPACE вместо обычного пространства.

.strings файлы обычно кодируются в кодировке UTF-8, поэтому, если вы откроете его в представлении Hex, вместо специального символа пробела вы увидите "C2 A0".

Ответ 4

В Inspector задано количество строк для метки как 3 или 4. Что вам потребуется. Затем содержимое будет отображаться в нескольких строках.

Ответ 5

Возможно, вам понадобится реализовать пользовательскую функцию обертывания слов.

// 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

или что-то в этом роде.

Ответ 6

Я не думаю, что это простой способ сделать это с UILabel. Конечно, одним из способов достижения такого же эффекта является вручную вставить "\n" до <text" в ваш пример. Другой вариант - использовать UIWebView со статическим HTML вместо UILabel, так что вы можете использовать фактический &nbsp.

Ответ 7

Если это не произойдет часто, вы можете сделать это:

NSString *string = @"lorem ipsum some \ntext 1";

label.text = string;

Вы можете динамически генерировать, где вы помещаете \n, используя количество символов, количество слов и т.д....

Ответ 8

Здесь быстрое расширение для фиксации сироты в строке путем замены последнего пространства неразрывным пространством:

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 автоматически разрешает эту проблему.