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];
你也可以通过故事板来做到这一点:
- select视图控制器上的标签
- 在“属性”检查器中,增加“行”选项的值(按Alt + Cmd + 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; }