如何在Swift中以编程方式为UILabel提供动态高度?

sss*_*sss 13 iphone ios swift

我已经采用了使用for循环动态生成的UIlabel,每个类型的diff文本都在标签中分配,我想根据文本动态地给出UILabel大小.

在Swift中有没有简单的解决方案?

use*_*143 9

let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height))
label.numberOfLines = 4
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
let font = UIFont(name: "Helvetica", size: 20.0)
label.font = font
label.text = "Whatever you want the text enter here"
label.sizeToFit()
Run Code Online (Sandbox Code Playgroud)

如果你想根据文本内容设置numberOfLines,请给出你的最大行数.这里非常重要.


blu*_*ere 5

根据您分配给它的文本、字体和宽度获取标签高度:

func rectForText(text: String, font: UIFont, maxSize: CGSize) -> CGSize {
        let attrString = NSAttributedString.init(string: text, attributes: [NSFontAttributeName:font])
        let rect = attrString.boundingRectWithSize(maxSize, options: NSStringDrawingOptions.UsesLineFragmentOrigin, context: nil)
        let size = CGSizeMake(rect.size.width, rect.size.height)
        return size
    }

let labelSize = rectForText("your text here", font: UIFont.systemFontOfSize(your font), maxSize: CGSizeMake(your label width,999))
let labelHeight = labelSize.height //here it is!
Run Code Online (Sandbox Code Playgroud)


Piy*_*ara 5

    myLabel.text = "Your Label Text Here"

    myLabel.textAlignment = .Natural

    myLabel.numberOfLines = 0

    myLabel.sizeToFit()

    myLabel.frame = CGRectMake(myLabel.frame.origin.x, myLabel.frame.origin.y, 280, myLabel.frame.height)
Run Code Online (Sandbox Code Playgroud)