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

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

如何使UILabel像这样显示消息

五星级 BBBBB CCCCC

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


当前回答

在接口构建器中,可以使用Ctrl + Enter将/n插入到所需位置。 这种方式可以实现以下情况

aaaaaaaaaa

其他回答

使用\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);

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

确保你的行数设置为0。

Alt + Enter

(Alt是你的选项键)

干杯!

//不要忘记将numberolines设置为0

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

对于任何其他人,可能有问题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);

如果你使用UILabel,你必须记住默认设置是1行,所以不管你添加了多少换行符(\n或\r),你需要确保它被设置为不止一行,这样它就可以被允许追加更多的行。

另一种选择是使用UITextView,它实际上是用于多行。

你可以在UILabel的XCode属性部分轻松实现这一点,见截图: