iPhone UILabel - неразрывный пробел - PullRequest
28 голосов
/ 24 февраля 2011

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

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

lorem ipsum some text
1

но я хочу отобразить это так:

lorem ipsum some
text 1

в общем, мне нужно сделать пробел между 'text' и '1' неразрывным пробелом.

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

Есть предложения?

Ответы [ 9 ]

48 голосов
/ 29 марта 2013

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

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

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

из: http://en.wikipedia.org/wiki/Whitespace_character

31 голосов
/ 12 мая 2015

Для Свифта:

let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
let sentencewithnbsp = String(map(sentence.generate()) {
    $0 == " " ? "\u{00a0}" : $0
})
9 голосов
/ 09 февраля 2018

В Swift 4 Мне пришлось использовать все колпачки: \U00A0

Пример:

lorem ipsum some\U00A0text 1

9 голосов
/ 03 октября 2016

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

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

1 голос
/ 19 декабря 2017

Вот расширение Swift для исправления сироты в строке путем замены последнего пробела неразрывным пробелом:

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

1 голос
/ 24 февраля 2011

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

1 голос
/ 24 февраля 2011

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

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

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

1 голос
/ 24 февраля 2011

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

0 голосов
/ 24 февраля 2011

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

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

label.text = string;

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

...