回答(19)
2 years ago
在字符串中使用 \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:
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);
2 years ago
在Interface Builder中的小方框中键入时,使用option-return插入换行符(\ n) . 在Interface Builder的Label属性中,设置#Lines = 0 .
选择标签,然后将Lines属性更改为0,如上图所示,然后在字符串中使用\ n进行换行 .
2 years ago
如果从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;
所以你必须用硬编码的 NSString 中的解析后的 \n 替换字符串中未解析的 \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 (=标签中无限数量的行) .
不知道为什么Apple选择不解析从XML读取的字符串中的 \n ?
希望这可以帮助 .
2 years ago
在界面构建器中,您可以使用Ctrl Enter将 /n 插入所需的位置 . 这种方式可以实现以下情况
AAA
AAAAAAA
2 years ago
您必须在 UILabel 上设置 numberOfLines 属性 . 默认值为 1 ,如果将其设置为 0 ,则会删除所有限制 .
2 years ago
重要的是要注意它是 \n (反斜杠)而不是 /n .
2 years ago
在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"
}
2 years ago
//不要忘记将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];
2 years ago
就这样做吧
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;
2 years ago
如果你使用 UILabel 你必须记住默认设置是1行,那么你添加多少个中断并不重要( \n 或 \r ),你需要确保它被设置为多行,所以它可能是允许附加更多行 .
一种替代方法是使用 UITextView ,它真正用于多线 .
您可以在UILabel的XCode属性部分轻松实现此功能,请参见屏幕截图:
2 years ago
在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;
2 years ago
只是使用 label.numberOfLines = 0;
2 years ago
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
2 years ago
对于其他可能在 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);
2 years ago
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
2 years ago
我更改标签框架尺寸似乎是错误的,尤其是在使用自动布局时 . 使用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;
2 years ago
如果将UILable属性从Plain设置为Attributed ... UILabel将保持多行文本,无论多少段落,因为您的UILabel高度和宽度设置为适合您要显示文本的屏幕区域 .
2 years ago
在我的情况下\ n也没有工作,我通过将行数保持为0来修复问题,并使用新行本身复制并粘贴文本,例如代替Hello \ n World i pasted
Hello World
在界面构建器中 .
2 years ago
我遇到了同样的问题,这就是我如何解决问题 . 希望这对某人有所帮助 .
//斯威夫特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;