iPhone UILabel – 非破坏性的空间

有没有办法在UILabel文本中使用不间断的空格?

例如,我有2行标签和换行符设置为换行。 这个标签的内容是从数据库中读取的,它存储为一个string。 现在有时我的标签文字看起来像这样:

lorem ipsum some text 1 

但我想要这样显示:

 lorem ipsum some text 1 

所以基本上,我需要在“文本”和“1”之间强制不间断的空格。

我在这里find了一些解决scheme,但是我认为在文本input源代码文件的时候它可以工作。 在我的情况下,文本是在数据库中。

有什么build议么?

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

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

U + 00A0 /不间断空间/通用分隔符,空格

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

对于Swift:

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

如果你想让它在.strings文件中工作,你可以inputOPTION + SPACE而不是一个普通的空格。

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

在Inspector中将标签的行数设置为3或4您要求的内容然后内容将以多行显示。

您可能需要实现自定义的换行function。

 // 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做到这一点。 当然,达到同样效果的一种方法是在示例中的“ text"前面手动插入"\n" 。 另一个select是使用带有静态HTML的UIWebView而不是UILabel,所以你可以使用一个实际的&nbsp ;

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

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

你可以dynamic地生成\ n使用字符数,字数等的位置。

下面是一个Swift扩展,通过用一个不间断的空格来replace最后一个空格来修复一个string中的孤儿:

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

尽pipe注意到iOS 11, UILabels自动解决了这个问题 。