2010-03-31 30 views
5

我正在從plist中加載一些幫助文本,並以UISabrollView中UILabels的形式顯示它們。代碼的部分如下:換行符在UILabel中不起作用

UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; 
    sectionDetailLabel.backgroundColor = [UIColor clearColor]; 
    sectionDetailLabel.numberOfLines = 0; 
    sectionDetailLabel.font = [UIFont systemFontOfSize:12]; 
    sectionDetailLabel.textColor = [UIColor blackColor]; 
    sectionDetailLabel.textAlignment = UITextAlignmentLeft; 
    sectionDetailLabel.lineBreakMode = UILineBreakModeWordWrap; 

    [baseScrollView addSubview:sectionDetailLabel]; 

    [sectionDetailLabel setText:myStringForThisSection]; 
    [sectionDetailLabel sizeToFit]; 

雖然任何「長」的文字就會越來越纏繞成多行正確,我無法使用換行符手動插入任何換行符「\ n」在「myStringForThisSection字符」。相反,我只看到UILabel中打印的字符'\'和'n'。

我查了一下,普遍認爲將numberOfLines設置爲0,將lineBreakMode設置爲有效值並調用sizeToFit(或者根據sizeWithFont設置UILabel的框架)應該這樣做。所有這些我都在上面的代碼中完成 - 並且在UILabel的多行中將未知長度的長字符串擬合時可以很好地工作。那麼在這裏可能會錯過什麼?

注意:所有使用的變量 - baseScrollView,myStringForThisSection和myOriginForThisSection - 在上面的代碼開始執行之前加載,並且工作正常。

+0

如果字符串來自外部來源,會出現這種情況。如果它是在代碼中聲明/創建的(甚至可能在plist中),則換行符將被編碼。不過,如果該行爲空行,則換行符後面必須有空格。 – 2010-11-23 10:08:40

回答

8

UILabel不解釋轉義序列\ n。您可以插入表示回車符和/或換行符的真實字符。做一個字符來保存你的換行符,然後插入它。

unichar newLine = '\n'; 
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1]; 
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR]; 

只要你的myStringForThisSection是可變的,那就應該這樣做。

+0

工作正常!非常感謝。 – 2010-09-20 15:18:24

+0

逃過的回車,即'\ r'也可以。至少在Swift 3中,iOS 10+ – Chris 2017-02-08 22:41:58

3

我上面的XCode 4.3

與蘇格蘭人古斯塔夫森的答案麻煩試試這個:

unichar chr[1] = {'\n'}; 
NSString *cR = [NSString stringWithCharacters:(const unichar *)chr length:1]; 

在你的代碼的東西,然後使用這樣的:

self.myLabel.text = [NSString stringWithFormat:@"First Label Line%@Second Label Line", cR]; 
+0

這已經很長時間了。我可以看到不使用「insertAtIndex」類型指令的優點,但它總是很危險,特別是當你用幾種不同的語言處理數據時。如果其他人發現這個特別有用,或者發現以前的代碼也過時了,我可以「推廣」這個答案或將其投票。 – 2012-03-07 19:54:08

+0

開發任何一種方式的作品,我這樣做的方式只是讓我的簡單頭腦更有意義!我確實遇到了你的singleCR定義有問題 - 我在IOS5 xCode 4.3.1中遇到了錯誤 – DoctorG 2012-03-12 01:39:25

+0

呵呵。一旦我有時間,我會檢查兩種解決方案,並回傳。 – 2012-03-12 08:36:19

1

我做不到DoctorG的解決方案可以工作(儘管我沒有花太多時間嘗試),但是當我提取轉義文本時,這裏有一個簡單的解決方案適用於我從一個XML文件。

在我的字符串函數類的,我定義:

+(NSString)escapeXml:(NSString*)string { 
    return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"]; 
}