如何为UILabel添加换行符?

让我看看我有一个string看起来像这样:

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

我怎样才能让UILabel像这样显示消息

AAAAA
BBBBB
CCCCC

我不认为\n被UILabel识别,那么有什么我可以放在NSString里面,这样UILabel知道它必须在那里创build一个换行符?

在你的string中使用\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); 

更新:replace为弃用

sizeWithFont:constrainedToSize:lineBreakMode:

引用, replace为不推荐的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); 

在这里输入图像说明 在Interface Builder的小方框中input以插入换行(\ n)时使用选项返回。 在Interface Builder的标签属性中,设置#Lines = 0。

select标签,然后将Lines属性更改为0,如下图所示,然后在string中使用\ n作为换行符。

如果您从XML文件中读取string,则此string中的换行符\nUILabel文本中将不起作用。 \n不被parsing为换行符。

这是解决这个问题的小技巧:

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

所以你必须用硬编码的NSStringparsing的\nreplacestring中未parsing的\n部分。

这是我的其他标签设置:

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

最重要的是将numberOfLines设置为0 (=标签中的行数不限)。

不知道为什么苹果select不parsing从XML读取的string?

希望这可以帮助。

在界面生成器中,可以使用Ctrl + Enter/n插入到所需的位置。 这样可以实现以下情况

AAA
AAAAAAA

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

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

//不要忘记将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]; 

在Swift 2.2中,> iOS 8

我已经在Storyboard上的属性检查器下设置Lines = 0,并将引用sockets连接到标签。 然后在这样的控制器中使用:

  @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" } 

如果您使用UILabel ,则必须记住默认设置为1行,因此添加多less个分支( \n\r )无关紧要,因此您需要确保将其设置为多行,可以被允许追加更多的行。

一个替代scheme是使用UITextView ,这是真正意义上的多线。

你可以很容易地在UILabel的XCode属性部分实现这个function,看截图:

在这里输入图像说明

在Xcode 6上,当使用自动换行时,甚至可以在string中使用\ n。 它会工作。 举个例子:

 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)]; label.textAlignment = NSTextAlignmentCenter; label.text = @"This will be on the first line\nfollowed by a line under it."; label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = 0; 
 Just use like this :) 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; 

只要使用label.numberOfLines = 0;

对于sizeWithFont:constrainedToSize:lineBreakMode:可能有问题的其他人sizeWithFont:constrainedToSize:lineBreakMode:或者任何人切换到ios8(该方法不推荐使用ios7),我使用sizeToFit来调整高度。

 UILabel *label; label.numberOfLines = 0; // Setup label with desired settings ... [label sizeToFit]; label.frame = CGRectMake(label.frame.origin.x, // Or use any desired origin label.frame.origin.y, label.frame.size.width, // Or use any desired width label.frame.size.height); 
 NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet; NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"]; 

改变标签的框架大小似乎是错误的,尤其是在使用自动布局的时候。 使用appendFormat方法似乎更合适。 这是我的例子:

 NSMutableString *list = [[NSMutableString alloc] init]; NSArray *textArray = @[@"AAAA", @"BBBB"]; for (NSString *string in textArray) { [list appendFormat:@"%@\n", string.mutableCopy]; } self.label.text = list; self.label.numberOfLines = 0; 

如果将UILable属性从Plain设置为Attributed,则UILabel将保留多行文本,而不pipeUILabel的高度和宽度设置为适合要显示文本的屏幕区域。

在我的情况下,\ n不工作,我通过保持行数为0来修复问题,并复制和粘贴文本与新行本身,而不是你好\ n世界我贴

你好

世界

在界面生成器中。

 textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC"; textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC textLabel.lineBreakMode = UILineBreakModeWordWrap; NSLog(@"The textLabel text is - %@",textLabel.text); 

我面临同样的问题,这里是我如何解决这个问题。 希望这会对某人有所帮助。

// 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;