让我们看看我有一个这样的字符串:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

如何使UILabel像这样显示消息

五星级 BBBBB CCCCC

我不认为\n能被UILabel识别,我能在NSString中放入什么东西让UILabel知道它必须在那里创建换行符吗?


当前回答

如果从XML文件读取字符串,则该字符串中的换行符\n在UILabel文本中不起作用。\n不会被解析为换行符。

这里有一个小技巧来解决这个问题:

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

你必须替换字符串中未解析的n部分用一个硬编码NSString中的解析的n。

以下是我的其他标签设置:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

最重要的是将numberolines设置为0 (= label中的行数无限制)。

不知道为什么苹果选择不解析从XML读取的字符串中的\n ?

其他回答

使用\n,就像在字符串中使用一样。

将numberolines设置为0以允许任意数量的行。

label.numberOfLines = 0;

使用sizeWithFont:更新标签框架以匹配文本的大小。如果你不这样做,你的文本将垂直居中或被切断。

UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:label.frame.size
                              lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

更新:替换deprecedsizewithfont:constrainedToSize:lineBreakMode:

参考,替换已弃用的sizeWithFont:在iOS 7?

CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];

label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

只是使用标签。numberolines = 0;

在xCode 11, Swift 5的\n工作良好,尝试以下代码:

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"

我也遇到过同样的问题,下面是我解决问题的方法。希望这对某些人有所帮助。

// Swift 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

/ / objective - c

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// c# (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  

在Interface Builder中的小框中输入时使用option-return插入换行(\n)。在Interface Builder的Label属性中,设置# Lines = 0。

选择标签,然后将Lines属性更改为0,如上图所示,然后在字符串中使用\n作为换行符。