换行符在UILabel中不起作用

时间:2010-03-31 18:48:39

标签: iphone formatting uilabel

我正在从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 - 在上面的代码开始执行之前加载,并且工作正常。

3 个答案:

答案 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"];
}