Answers:
使用\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);
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);
在Interface Builder中的小方框中输入换行符(\ n)时,请使用option-turn键。在“界面生成器”的“标签”属性中,设置“#行= 0”。
选择标签,然后将Lines属性更改为0(如上图所示),然后在字符串中使用\ n进行换行。
如果您从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
的解析来替换字符串中未解析的部分。\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;
最重要的是设置numberOfLines
为0
(=标签中的行数不受限制)。
不知道苹果为什么选择不解析\n
从XML读取的字符串?
希望这可以帮助。
\n
从Parse.com获取字符串时,iOS不会解析(我想从其他API获取字符串时也会发生)
在Swift 2.2中,> iOS 8
我已经在“故事板”的“属性检查器”下设置了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"
}
//不要忘记将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];
就这样做
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;
在Xcode 6上,使用自动换行时,甚至可以在字符串内使用\ 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;
在我的情况下,\ n也不起作用,我通过将行数保持为0来解决此问题,并使用新行本身复制并粘贴了文本(例如,而不是Hello \ n World)
你好
世界
在界面生成器中。
对于可能遇到问题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);
更改标签框尺寸似乎对我来说是错误的,尤其是在使用自动布局时。使用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;
我遇到了同样的问题,这就是我如何解决问题的方法。希望这对某人有帮助。
// 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;
UILabel
没有origin
,也没有size
iOS上的财产?它可能应该是label.frame.origin.x
等