有没有办法让UILabel
中有多行文字,就像UITextView
一样,还是应该用第二行代替?UILabel中有多行文字
回答
我找到了解决方案。
一只是必须添加以下代码:
// 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;
恢复旧的答案(供参考和开发者愿意支持低于6.0的iOS):
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
在侧面:既枚举值无论如何,收益率为0
。
IB,在设置的行数为0(允许无限行)
当使用IB文本字段中键入,使用“ALT-回归”插入返回并转到下一行(或你可以复制已经由行分隔出来的文本)。
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
上述解决方案在我的情况下不起作用。我在做这样的:
- (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);
//...
}
我已经找到了最好的解决方案(以本应在框架内解决的,否则令人沮丧的问题)类似于vaychick的。
只需设置在任一IB线为0或代码
myLabel.numberOfLines = 0;
的数目这将显示所需的线,但将重新定位的标签,以便其水平居中(使得1线和3线标签对齐在他们的水平位置)。为了解决这个问题加:
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;
如果你必须使用:
myLabel.numberOfLines = 0;
属性你也可以使用一个标准的换行符("\n")
,在代码中,强制新生产线。
您可以使用\r
转到下一行,同时使用NSString
填写UILabel
。
UILabel * label;
label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
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中不知道为什么为我工作。尝试使用和不使用归因文本。有什么建议么。
使用此拥有多行文本在UILabel
:
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
斯威夫特:
textLabel.lineBreakMode = .byWordWrapping
textLabel.numberOfLines = 0
可以试试这个
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
Try using this code:
lblName.numberOfLines = 0;
[lblName sizeToFit];
你可以做到这一点通过故事板太:
- 选择视图控制器
- 在属性检查器上的标签,增加线路选项的值(按Alt + Cmd的+ 4显示属性检查器)
- 双击视图控制器中的标签并写入或粘贴文本
- 调整标签大小和/或增加字体大小以便显示整个文本
已经回答,但您也可以在故事板中手动执行此操作。在标签的属性检查器下,可以将换行符更改为换行符(或字符换行)。
在这个函数中,您要在标签中分配字符串,并通过字体大小代替self.activityFont并通过标签宽度代替235,现在您可以根据字符串获取标签高度。 它会正常工作。
-(float)calculateLabelStringHeight:(NSString *)answer
{
CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
return textRect.size.height;
}
此代码是根据文本
+ (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;
}
我震动奥尔森同意,NSLineBreakByWordWrapping返回尺寸高度默认。 我添加了财产sizeToFit像Gurumoorthy Arumugam指导修复它。
如果您想让标签内的字体自行调整以适应标签的边界。您可以使用:
textLabel.adjustsFontSizeToFitWidth = YES;
谢谢大家。
你应该试试这个:
-(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;
}
使用故事BORAD:选择标签设置线路零数...... Or Refer this
设置如下无论是在代码或故事板本身
Label.lineBreakMode = NSLineBreakByWordWrapping; 标签。numberOfLines = 0;
请不要忘记为标签设置左,右,上,下约束,否则不起作用。线的
夫特3
集数为零动态文本信息,这将是用于改变文本有用的。
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
这些东西让我
变化的UILabel
label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;
的这些属性和同时也让输入字符串使用\ n显示在不同线路不同的话。
例子:
NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
- 1. iOS中UILabel中的多行文字9
- 2. AutoLayout UILabel多行
- 3. 带有多个按钮和字体的多行UILabel
- 4. UIPickerView与多行UILabel
- 5. 多色UILabel文本
- 6. 多行自动调整文本UILabel
- 7. UILabel动画文字
- 8. 具有多种字体颜色的UILabel文本
- 9. 将文本分配到多行UILabel的一行中
- 10. UILabel没有正确更改文字
- 11. 创建一个多行UILabel
- 12. 多行UILabel,可以吗?
- 13. 多行UILabel正在截断
- 14. UILabel多行截断中间整个字符串不工作
- 15. 让文字开始更多地朝向UILabel的中间?
- 16. 更改UILabel文字动画?
- 17. 如何更新uilabel文字
- 18. UILabel只模糊文字
- 19. 每行上的UILabel文本
- 20. UILabel中的文字雕刻效果
- 21. UILabel在xcode 6中重叠文字
- 22. 强制文字垂直放入UILabel中?
- 23. 文字底部+中心UILabel iOS Swift
- 24. 如果uilabel只有一行,使用uiLabel的第二行
- 25. 检查UILabel中是否有换行符
- 26. 自安装的字体在UILabel中有错误的行高
- 27. UILabel文本多行给定文本的宽度
- 28. 多行UILabel与内容大小相同的宽度UILabel
- 29. 文本中的UILabel
- 30. UILabel中的多种颜色
检查这个问题 http://stackoverflow.com/questions/2312899/how-to-add-line-break-for-uilabel – user1766342 2013-02-13 07:17:56
注意`UILineBreakModeWordWrap`在iOS 6中已被弃用。现在应该使用'NSLineBreakByWordWrapping = 0`请参阅文档[here](http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSParagraphStyle_Class/Reference /Reference.html#//apple_ref/c/tdef/NSLineBreakMode) – Austin 2012-10-03 01:03:21