iPhone UILabel - non breaking space

2020-02-26 03:13发布

Is there a way to use non breaking spaces in UILabel text?

For example, I have label with 2 lines and line breaking mode set to word wrap. The content for this label is read from database, where it's stored as a string. Now sometimes my text in label looks like that:

lorem ipsum some text
1

but I want to display it like that:

lorem ipsum some
text 1

so basicly, I need to force non breaking space between 'text' and '1'.

I've found some solution here, but I think it could work when the text is entered in source code file. In my case the text is in database.

Any suggestions?

9条回答
The star\"
2楼-- · 2020-02-26 03:24

I don't think there's a simple way to do this with UILabel. Of course one way to achieve the same effect is to manually insert a "\n" before "text" in your example. Another option is to use a UIWebView with static HTML instead of the UILabel, so you can use an actual &nbsp.

查看更多
爷的心禁止访问
3楼-- · 2020-02-26 03:24

Here's a Swift extension to fix an orphan in a string by replacing the last space with a non-breaking space:

extension String {
    var replacingLastSpace: String {
        if let lastSpace = range(of: " ", options: .backwards, locale: .current) {
            return replacingCharacters(in: lastSpace, with: "\u{00a0}")
        }
        return self
    }
}

Although note as of iOS 11, UILabels solve this problem automatically.

查看更多
够拽才男人
4楼-- · 2020-02-26 03:36

For Swift:

let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
let sentencewithnbsp = String(map(sentence.generate()) {
    $0 == " " ? "\u{00a0}" : $0
})
查看更多
\"骚年 ilove
5楼-- · 2020-02-26 03:38

In Swift 4 I had to use all caps: \U00A0

Example:

lorem ipsum some\U00A0text 1

Update Feb 2020 from the comments. Thanks to @corban:

In the Localizable.strings file it still needs to be \U00A0 - in code you have to use \u{00a0}

查看更多
仙女界的扛把子
6楼-- · 2020-02-26 03:38

If this is not going to happen often, you can do this:

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

label.text = string;

You can dynamically generate where you put the \n using character counts, word counts etc...

查看更多
叛逆
7楼-- · 2020-02-26 03:43

Use the no-break space (\u00a0) ex: @"hello**\u00a0**world!"

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

U+00A0 / no-break space / Common Separator, space

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

查看更多
登录 后发表回答