有没有办法在UILabel文本中使用非中断空格?
例如,我有2行标签和换行模式设置为自动换行。从数据库中读取此标签的内容,并将其存储为字符串。现在有时我的标签中的文字看起来像那样:
lorem ipsum some text
1
但我希望像那样显示:
lorem ipsum some
text 1
基本上,我需要在'text'和'1'之间强制不间断的空格。
我找到了一些解决方案here,但我认为在源代码文件中输入文本时它可以正常工作。在我的情况下,文本在数据库中。
有什么建议吗?
答案 0 :(得分:48)
使用不间断空格(\ u00a0)ex:@"hello**\u00a0**world!"
post.text = [postText stringByAppendingString: @"1\u00a0hour\u00a0ago."];
U + 00A0 /不间断空格/公共分隔符,空格
答案 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,因此您可以使用实际 
。
答案 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的位置......