iPhone UILabel - 非破坏性空间

时间:2011-02-24 13:04:27

标签: ios iphone text uilabel

有没有办法在UILabel文本中使用非中断空格?

例如,我有2行标签和换行模式设置为自动换行。从数据库中读取此标签的内容,并将其存储为字符串。现在有时我的标签中的文字看起来像那样:

lorem ipsum some text
1

但我希望像那样显示:

lorem ipsum some
text 1

基本上,我需要在'text'和'1'之间强制不间断的空格。

我找到了一些解决方案here,但我认为在源代码文件中输入文本时它可以正常工作。在我的情况下,文本在数据库中。

有什么建议吗?

9 个答案:

答案 0 :(得分:48)

使用不间断空格(\ u00a0)ex:@"hello**\u00a0**world!"

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

U + 00A0 /不间断空格/公共分隔符,空格

来自:http://en.wikipedia.org/wiki/Whitespace_character

答案 1 :(得分:31)

对于Swift:

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

答案 2 :(得分:9)

Swift 4 中,我必须使用全部大写:\U00A0

示例:

lorem ipsum some\U00A0text 1

答案 3 :(得分:8)

如果要在.strings文件中使用此功能,可以键入OPTION + SPACE而不是常规空格。

.strings文件通常是UTF-8编码的,所以如果你在Hex视图中打开它,你会看到" C2 A0"代替特殊的空间角色。

答案 4 :(得分:1)

在Inspector中,将Label的行数设置为3或4您需要什么然后内容将以多行显示。

答案 5 :(得分:1)

您可能需要实现自定义自动换行功能。

// 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 :(得分:1)

我认为UILabel没有一种简单的方法可以做到这一点。当然,实现相同效果的一种方法是在示例中的“"\n"之前手动插入text"。另一种选择是使用带有静态HTML而不是UILabel的UIWebView,因此您可以使用实际&nbsp

答案 7 :(得分:1)

这是一个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 solve this problem automatically

答案 8 :(得分:0)

如果不经常这样做,你可以这样做:

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

label.text = string;

您可以使用字符数,字数等来动态生成放置\ n的位置......