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,所以你可以使用一个实际的 
;
如果这不会经常发生,你可以这样做:
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自动解决了这个问题 。