2011-02-24 136 views
20

有没有办法在UILabel文本中使用非破坏空格?iPhone UILabel - 非破坏空间

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

lorem ipsum some text 
1 

,但我想这样显示出来:

lorem ipsum some 
text 1 

所以基本上,我需要给力“文本”之间不换行空格和“1 ”。

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

有什么建议吗?

回答

1

In Inspector将标签的行数设置为3或4您需要什么然后内容将以多行显示。

+0

线的数目被设置为5。这不是一个问题。正如你所看到的,无论如何,在第一个和第二个例子中,文本显示在两行中。问题是我不希望那些在另一行中分开的'1'。 – Marcin 2011-02-24 13:13:02

+0

然后将行数设置为1,并在“调整为适合”中减小字体大小。 – SNR 2011-02-24 13:18:21

+0

这对我来说不是一个好的选择,因为我想要固定的字体大小(例如,要使用与其他标签相同的字体大小,并使用不同的文本)。 – Marcin 2011-02-24 13:26:02

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 

或类似的东西。

0

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

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

label.text = string;

可以动态地生成,您使用的字符数,字数等把\ n ...

1

我不要以为用UILabel就可以做到这一点。当然,一个以达到同样的效果的方法是在你的榜样text"之前的“手动插入一个"\n"。另一种选择是使用静态的HTML代替的UILabel一个UIWebView,所以你可以使用一个实际的&nbsp

+0

最后,我通过在我的文本中插入“\ n”来完成此操作。不完全是我试图做的,但无论如何,工作。 – Marcin 2011-02-26 09:39:06

43

使用的无间断间隔(\ u00a0)例如:@"hello**\u00a0**world!"

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

U + 00A0 /无间断间隔/通用隔离片,其空间

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

+18

为了让我的Localizable.strings文件能够工作,我必须使用全部大写:'\ U00A0'。 – 2013-06-19 03:40:15

25

对于斯威夫特:

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

也可以直接在字符串中使用'\ u {00a0}',而不使用'map'函数 - 'lorem \ u0'} ipsum' – zvonicek 2016-04-09 12:52:03

3

如果你想要得到这个在.strings文件时,你可以键入OPTION + SPACE而不是常规的空间。

.strings文件通常是UTF-8编码,因此如果在十六进制视图中打开它,您将看到“C2 A0”代替特殊的空格字符。

+0

感谢您的选项+空间提示 - 我不知道这适用于除了新线以外的任何东西! – 2017-04-06 13:48:53

0

这里有一个雨燕扩展与非打破空间将最后空间来修复串个孤儿

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的。

0

夫特4我不得不使用全部大写:\U00A0

实施例:

lorem ipsum some\U00A0text 1