var label = UILabel()
let stringValue = "A label\nwith\nmultiline text."
label.text = stringValue
label.numberOfLines = 2 // 0
label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
label.minimumScaleFactor = 0.5 // It is not required but nice to have a minimum scale factor to fit text into label frame
另外,不要为标签设置超过2行的高度约束 .
2
有趣的问题 . 这是我的解决方案:
let labelText = self.mylabel.text //where mylabel is the label
let labelSeperated = self.labelText.components(seperatedBy: " ")
if labelSeperated.count > 1 {
myLabel.lineBreakMode = .byWordWrapping
myLabel.numberOfLines = 0
} else {
myLabel.numberOfLines = 1
myLabel.adjustsFontSizeToFitWidth = true
}
4 回答
这将工作..
为您的标签设置 minimum scale factor . 如图所示 .
如果想要更多行数,则设置行数= 2 //或零(0)
将换行模式设置为'.byTruncatingTail',共2行
Swift 3
为动态文本信息设置零行数,它对于改变文本很有用 .
另外,不要为标签设置超过2行的高度约束 .
有趣的问题 . 这是我的解决方案:
将此代码放在标签将被更改的位置 . 如果有两个或更多数字,则将行号设置为0,否则仅设置为1行 .
如果您想调整多行标签的大小,请查看this博文 .
Swift 3
我查看了paper111发布的帖子 . 不幸的是它在Obj-C中并且
sizeWithFont: ,constrainedToSize: , lineBreakMode:
方法已被弃用 . ( - - );他的回答很好,但仍未提供固定的尺寸 . 我所做的是从一个除了高度之外的所有东西开始的
UILabel
(对于大多数人来说这可能是相同的) .如果不需要,你可以看到有一个
guard
阻止调整大小 . 此外,多次调用sizeToFit()
并不是想到另一种方式 . 我试图在循环中使用myLbl.font.withSize(fSize)
但它不起作用,所以我使用了完整的方法 .希望这对你有用!
@Krunal的答案帮助了我但是当你的线数不明数时它不起作用所以这就是我提出的解决方案 . 您还可以设置最大和最小字体大小 . 希望这有助于某人!
Swift 2.2 - 抱歉,还没有迁移到 Swift 3 .