如何为UILabel添加换行符?

Tha*_*ham 253 iphone newline line-breaks uilabel ios

让我们看看我的字符串看起来像这样:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让UILabel显示这样的信息

AAAAA
BBBBB
CCCCC

我不认为\nUILabel会认可,所以我可以在NSString中放置任何东西,以便UILabel知道它必须在那里创建换行符吗?

Ger*_*haw 324

使用\n如您使用的是您的字符串.

将numberOfLines设置为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);
Run Code Online (Sandbox Code Playgroud)

更新:已弃用的替换

sizeWithFont: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);
Run Code Online (Sandbox Code Playgroud)

  • `UILabel`在iOS上没有`origin`或`size`属性?它可能应该是`label.frame.origin.x`等. (2认同)

Mar*_*rco 270

在此输入图像描述

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

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

  • 这超级有用! (2认同)

Al-*_*ani 131

如果从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;
Run Code Online (Sandbox Code Playgroud)

因此,您必须\n通过\n在硬编码中解析来替换字符串中未解析的部分NSString.

这是我的其他标签设置:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;
Run Code Online (Sandbox Code Playgroud)

最重要的是设置numberOfLines0(=标签中的无限行数).

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

希望这可以帮助.

  • iOS 从 Parse.com 获取字符串时不会解析 `\n` (我猜从其他 API 获取字符串时也会发生这种情况) (2认同)

小智 114

在界面构建器中,您可以使用Ctrl+ Enter来插入/n所需的位置.这种方式可以实现以下情况

aaa
aaaaaaa

  • 真不敢相信我从来不知道那个把戏!我尝试过shift-Enter,因为在其他地方这是相当标准的。感谢那! (2认同)
  • 很棒的帖子!小更正:我相信你的意思是插入 \n 而不是插入 /n (2认同)

Dan*_*Dan 25

你必须在上面设置numberOfLines属性UILabel.默认值为1,如果将其设置为0,则将删除所有限制.


小智 22

重要的是要注意它\n(反斜杠)而不是/n.


Cod*_*ide 9

在Swift 2.2中,> iOS 8

我在Storyboard上的Attribute Inspector下设置了Lines = 0,并将引用插座链接到标签.然后在控制器中使用如下:

 @IBOutlet weak var listLabel: UILabel!

 override func viewDidLoad() {
      ...
      listLabel.text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8"
 }
Run Code Online (Sandbox Code Playgroud)


Der*_*ked 9

对于那些想要简单解决方案的人,请在 Interface Builder 的文本标签输入框中执行以下操作:

确保您的行数设置为 0。

Alt + Enter

(Alt 是您的选项键)

干杯!


小智 6

//不要忘记将numberOfLines设置为零

UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd \nUK Apr 12"];
[cell addSubview:locationTitle];
Run Code Online (Sandbox Code Playgroud)


小智 6

在 xCode 11、Swift 5 中\n工作正常,请尝试以下代码:

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"
Run Code Online (Sandbox Code Playgroud)


San*_* SM 5

就这样做吧

NSString * strCheck = @"A\nB";

strCheck = [strCheck stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];  //This is to prevent for fetching string from plist or data structure

label.numberOfLines = 0;

label.lineBreakMode = NSLineBreakByWordWrapping;

label.text = strCheck;
Run Code Online (Sandbox Code Playgroud)