我正在从plist中加载一些帮助文本,并以UIScrollView中的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];
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];
虽然任何“长”文本都被正确地包装成多行,但我无法使用'myStringForThisSection'中的换行符'\ n'手动插入任何换行符。我只看到UILabel中打印的字符'\'和'n',而不是我想要的换行符。
我查了一下,普遍的共识似乎是将numberOfLines设置为0,将lineBreakMode设置为有效值并调用sizeToFit(或根据sizeWithFont :)设置UILabel的框架应该这样做。我似乎在上面的代码中做了所有这些 - 并且在将未知长度的长字符串装入UILabel上的多行时非常有效。那么这里可能缺少什么?
注意:所有使用的变量 - baseScrollView,myStringForThisSection和myOriginForThisSection - 在上面的代码开始执行之前加载,并且工作正常。
答案 0 :(得分:8)
UILabel不解释转义序列\ n。您可以插入代表回车符和/或换行符的真实字符。创建一个字符来保存换行符,然后插入它。
unichar newLine = '\n';
NSString *singleCR = [NSString stringWithCharacters:&newLine length:1];
[myStringForThisSection insertString:singleCR atIndex:somePlaceIWantACR];
只要你的myStringForThisSection是可变的,就应该这样做。
答案 1 :(得分:3)
我在上面的XCode 4.3中找到了Scot Gustafson的答案
请改为尝试:
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];
答案 2 :(得分:1)
我无法得到Scott& DoctorG的工作解决方案(虽然我没有花太多时间尝试),但是当我从xml文件中提取转义文本时,这是一个简单的解决方案。
在我的字符串函数类中,我定义:
+(NSString)escapeXml:(NSString*)string {
return [string stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];
}