UILabel中有多行文本

有没有办法像在UITextView UILabel有多行文本,或者我应该使用第二个呢?

我find了解决scheme。

一个只需添加下面的代码:

 // Swift textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping textLabel.numberOfLines = 0 // For Swift >= 3 performanceLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B' performanceLabel.numberOfLines = 0 // Objective-C textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.numberOfLines = 0; // C# (Xamarin.iOS) textLabel.LineBreakMode = UILineBreakMode.WordWrap; textLabel.Lines = 0; 

恢复旧的答案(供参考和愿意支持iOS 6.0以下的开发者):

 textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 0; 

在一边:无论如何,枚举值都会降到0

在IB中,将行数设置为0(允许无限行)

当使用IB在文本字段中键入内容时,使用“alt-return”插入一个返回并转到下一行(或者可以复制已被行隔开的文本)。

我发现的最好的解决scheme(本来应该在框架中解决的令人沮丧的问题)与vaychick类似。

只需在IB或代码中将行数设置为0即可

 myLabel.numberOfLines = 0; 

这将显示所需的行,但将重新定位标签,使其居中水平(使1行和3行标签alignment在其水平位置)。 要解决这个添加:

 CGRect currentFrame = myLabel.frame; CGSize max = CGSizeMake(myLabel.frame.size.width, 500); CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode]; currentFrame.size.height = expected.height; myLabel.frame = currentFrame; 

使用这个在UILabel有多行文本:

 textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.numberOfLines = 0; 

迅速:

 textLabel.lineBreakMode = .byWordWrapping textLabel.numberOfLines = 0 
 myUILabel.numberOfLines = 0; myUILabel.text = @"your long string here"; [myUILabel sizeToFit]; 

如果你必须使用:

 myLabel.numberOfLines = 0; 

属性,你也可以用代码中的标准换行符("\n")强制换行。

您可以使用\r在使用NSString填充UILabel时转到下一行。

 UILabel * label; label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"]; 

让我们试试这个

 textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 0; 
 textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 0; 

上面的解决scheme在我的情况下不起作用。 我正在这样做:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // ... CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap]; return size.height + 20; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { // ... cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; cell.textLabel.numberOfLines = 0; cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0]; } // ... UILabel *textLabel = [cell textLabel]; CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap]; cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20); //... } 

使用故事borad:select标签将行数设置为零…… 或者参考这个

在这里输入图像说明

 UILabel *helpLabel = [[UILabel alloc] init]; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label]; helpLabel.attributedText = attrString; // helpLabel.text = label; helpLabel.textAlignment = NSTextAlignmentCenter; helpLabel.lineBreakMode = NSLineBreakByWordWrapping; helpLabel.numberOfLines = 0; 

由于某些原因,它不适合我在iOS 6中不知道为什么。 尝试与没有归属文本。 有什么build议么。

 Try using this code: lblName.numberOfLines = 0; [lblName sizeToFit]; 

你应该试试这个:

 -(CGFloat)dynamicLblHeight:(UILabel *)lbl { CGFloat lblWidth = lbl.frame.size.width; CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:lbl.font} context:nil]; return lblTextSize.size.height; } 
 UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; [labelName sizeToFit]; labelName.numberOfLines = 0; labelName.text = @"Your String..."; [self.view addSubview:labelName]; 

你也可以通过故事板来做到这一点:

  1. select视图控制器上的标签
  2. 在“属性”检查器中,增加“行”选项的值(按Alt + Cmd + 4以显示“属性”检查器)
  3. 双击视图控制器中的标签,然后写入或粘贴文本
  4. 调整标签大小和/或增加字体大小,以便显示整个文本

这些帮助我

更改UILabel的这些属性

 label.numberOfLines = 0; label.adjustsFontSizeToFitWidth = NO; label.lineBreakMode = NSLineBreakByWordWrapping; 

在给出inputstring的同时,使用\ n在不同的行中显示不同的单词。

例如:

  NSString *message = @"This \n is \na demo \n message for \n stackoverflow" ; 
 UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)]; [textLabel sizeToFit]; textLabel.numberOfLines = 0; textLabel.text = @"Your String..."; 

已经回答了,但是您也可以在故事板中手动执行。 在“标签的属性检查器”下,可以将换行符更改为换行(或字符换行)。

在这个函数传递string,你想在标签中分配,并通过字体大小代替self.activityFont,并通过标签宽度代替235,现在你得到标签的高度根据你的string。 它会正常工作。

 -(float)calculateLabelStringHeight:(NSString *)answer { CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil]; return textRect.size.height; } 

我同意Jarred Olson, NSLineBreakByWordWrapping默认的 。 我添加了像Gurumoorthy Arumugam的指导来修复它的财产sizeToFit

如果您想让标签内的字体自行调整以适应标签的边界。 您可以使用 :

 textLabel.adjustsFontSizeToFitWidth = YES; 

谢谢大家。

无论是在代码或故事板本身下面设置

Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;

请不要忘记为标签设置左,右,上,下限制,否则将不起作用。

Swift 3
将dynamic文本信息的行数设置为零,这将对变化的文本有用。

 var label = UILabel() let stringValue = "A label\nwith\nmultiline text." label.text = stringValue label.numberOfLines = 0 label.lineBreakMode = .byTruncatingTail // or .byWrappingWord label.minimumScaleFactor = 0.8 . // It is not required but nice to have a minimum scale factor to fit text into label frame 

在这里输入图像说明

此代码根据文本返回大小高度

 + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { CGFloat result = font.pointSize+4; if (text) { CGSize size; CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, 999) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil]; size = CGSizeMake(frame.size.width, frame.size.height+1); result = MAX(size.height, result); //At least one row } return result; }