2011-02-24 78 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