我的 storyboard 笔尖中有一个名为UILabel
的{{1}}设置为默认高度。我希望以编程方式扩展高度以适应它的内容。这是我到目前为止所尝试的:
titleLabel
这对我来说无论如何都不适用!我总是只在// just setting content
titleLabel.text = "You don't always know what you are getting with mass-market cloud computing services. But with SimpliCompute, the picture is clear. SimpliCompute gives you powerful virtual servers you can deploy using just your web browser. That’s enterprise grade technology you can deploy and control on-the-fly."
titleLabel.numberOfLines = 0
titleLabel.preferredMaxLayoutWidth = 700
titleLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
titleLabel.sizeToFit()
中看到一行文字。我做错了什么?
我绝对需要文本内容可变。
答案 0 :(得分:24)
我通过添加自动布局约束来解决问题:
但我对此并不满意。经过了大量的试验和错误,无法理解为什么会这样。
此外,我必须在我的titleLabel.numberOfLines = 0
ViewController
答案 1 :(得分:18)
我知道它有点老了但是我最近调查了它:
let l = UILabel()
l.numberOfLines = 0
l.lineBreakMode = .ByWordWrapping
l.text = "BLAH BLAH BLAH BLAH BLAH"
l.frame.size.width = 300
l.sizeToFit()
首先将numberOfLines属性设置为0,以便设备了解您并不关心它需要多少行。 然后指定您最喜欢的BreakMode 然后需要在sizeToFit()方法之前设置宽度。然后标签知道它必须符合指定的宽度
答案 2 :(得分:17)
它应该工作。试试这个
var label:UILabel = UILabel(frame: CGRectMake(10
,100, 300, 40));
label.textAlignment = NSTextAlignment.Center;
label.numberOfLines = 0;
label.font = UIFont.systemFontOfSize(16.0);
label.text = "First label\nsecond line";
self.view.addSubview(label);
答案 3 :(得分:4)
使用Xcode中的图形用户界面(GUI),您可以执行以下操作:
- 转到"
Attribute Inspector
"并将Lines
值设置为0
。默认情况下,它设置为1
。- 可以通过点击
以多行方式书写标签文字option + return
。
- 现在,转到"
Size Inspector
"并设置width
,height
,X
&标签的Y
position
。
这就是全部。
答案 4 :(得分:0)
以编程方式,迅速
label.lineBreakMode = NSLineBreakMode.byWordWrapping
label.titleView.numberOfLines = 2
答案 5 :(得分:0)
在带有Xcode 10.2的Swift 5中以编程方式
以@La masse解决方案为基础,但使用自动布局来支持旋转
设置视图位置的锚点(左,上,centerY,centerX等)。您还可以使用提供的UIScreen扩展名来设置宽度锚点或动态设置frame.width(以支持旋转)
label = UILabel()
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
self.addSubview(label)
// SET AUTOLAYOUT ANCHORS
label.translatesAutoresizingMaskIntoConstraints = false
label.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 20).isActive = true
label.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -20).isActive = true
label.topAnchor.constraint(equalTo: self.topAnchor, constant: 20).isActive = true
// OPTIONALLY, YOU CAN USE THIS INSTEAD OF THE WIDTH ANCHOR (OR LEFT/RIGHT)
// label.frame.size = CGSize(width: UIScreen.absoluteWidth() - 40.0, height: 0)
label.text = "YOUR LONG TEXT GOES HERE"
label.sizeToFit()
如果使用UIScreen动态设置frame.width:
extension UIScreen { // OPTIONAL IF USING A DYNAMIC FRAME WIDTH
class func absoluteWidth() -> CGFloat {
var width: CGFloat
if UIScreen.main.bounds.width > UIScreen.main.bounds.height {
width = self.main.bounds.height // Landscape
} else {
width = self.main.bounds.width // Portrait
}
return width
}
}
答案 6 :(得分:0)
extension UILabel {
var textSize: CGSize { text?.size(withAttributes: [.font: font!]) ?? .zero }
func setSizeForText(_ str: String, maxWidth: CGFloat) {
text = str
let dividedByMaxWidth = Int(textSize.width / maxWidth)
if dividedByMaxWidth == 0 {
frame.size = textSize
} else {
numberOfLines = dividedByMaxWidth + 1
frame.size = CGSize(width: maxWidth, height: frame.size.height * CGFloat(numberOfLines))
sizeToFit()
}
}
}
sizeToFit() 最后会将标签的宽度缩小到断字后最宽的行
答案 7 :(得分:0)
这对我有用:
numberOfLines
的 UILabel
属性设置为 0yourLabel.sizeToFit()
后添加此行:UILabel