Iphone 换行符在UILabel中不起作用

Iphone 换行符在UILabel中不起作用,iphone,formatting,uilabel,Iphone,Formatting,Uilabel,我正在从plist加载一些帮助文本,并将其以UIScrollView中的UILabel的形式显示出来。守则的部分内容如下: UILabel *sectionDetailLabel = [[[UILabel alloc] initWithFrame:CGRectMake(34, myOriginForThisSection, 286, 20)] autorelease]; sectionDetailLabel.backgroundColor = [UIColor clearCol

我正在从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];

当任何“长”文本正确地包装到多行中时,我无法在“mystringfortississection”中使用换行符“\n”手动插入任何换行符。我只看到UILabel中打印的字符“\”和“n”,而不是我想要换行的地方

我查了一下,普遍的共识似乎是将numberOfLines设置为0,将lineBreakMode设置为有效值并调用sizeToFit(或基于sizeWithFont:设置UILabel的框架)就可以了。所有这些我似乎都在上面的代码中完成了——当将长度未知的长字符串放入UILabel上的多行中时,效果非常好。那么这里可能缺少什么呢


注意:所使用的所有变量—BaseCollView、MyStringFortissSection和myOriginForThisSection—都是在上述代码开始执行之前加载的,并且工作正常。

UILabel不解释转义序列\n。可以插入表示回车符和/或换行符的实字符。制作一个字符来保存换行符,然后插入它

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

只要您的mystringfortississection是可变的,就应该可以了。

我对上面在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];

我无法让Scott&DoctorG的解决方案发挥作用(尽管我没有花太多时间尝试),但当我从xml文件中提取转义文本时,下面是一个简单的解决方案

在我的字符串函数类中,我定义:

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

如果字符串来自外部源,则会发生这种情况。如果它是在代码中声明/创建的(甚至可能是在plist中),那么换行符将被这样编码。如果换行符是空行,那么换行符后面必须跟空格。已经…很久了。但是,我可以看到不使用“insertAtIndex”类型指令的优点,这可能总是很危险的,尤其是当您使用几种不同的语言处理数据时。如果其他人觉得这个特别有用,或者发现以前的代码也过时了,我可以“推广”这个答案或者投票支持它。Dev无论哪种方法都有效,我这样做对我这样的头脑来说都更有意义!我确实在你对singleCR的定义上遇到了问题——我在IOS5 xCode 4.3.1He中遇到了一个错误。一旦有时间,我将检查这两种解决方案,然后发回。逃逸的回车,即'\r',也有效。至少在iOS 10上使用Swift 3+