Ios 如何在Swift中以编程方式为UILabel指定动态高度?

Ios 如何在Swift中以编程方式为UILabel指定动态高度?,ios,iphone,swift,Ios,Iphone,Swift,我采用了使用for循环动态生成的UIlabel,每个类型的diff文本都分配在label中,我想根据文本动态地给出UIlabel的大小 在Swift中有没有简单的解决方案 let label:UILabel = UILabel(frame: CGRectMake(x, y, width, height)) label.numberOfLines = 4 label.lineBreakMode = NSLineBreakMode.ByWordWrapping let font = UIFont(n

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

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

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()
如果你想根据文本内容设置numberOfLines,请给出最大行数。这在这里非常重要

let label = UILabel()
label.backgroundColor = UIColor.greenColor()
label.text = "Hello,world.\n Just a test."
let font = UIFont.systemFontOfSize(17.0)
label.font = font
label.numberOfLines = 0;
let text = label.text! as NSString
let size = text.sizeWithAttributes([NSFontAttributeName:font])
label.frame = CGRectMake(0, 0, size.width, size.height)

您可以在代码中使用自动布局

根据指定给标签的文本、字体和宽度获取标签高度:

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!

使用此方法获取并确定字符串的大小。将最大高度和最大宽度放入
CGSize(widhth,height)
中,它将返回
CGSize
包含高度和宽度的对象。根据您的场景使用它

Swift 4.1扩展方法计算标签高度:

extension UILabel {

    func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat {
        let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = text

        label.sizeToFit()
        return label.frame.height
    }

}

请参阅:

创建扩展以按照返回标签高度的方法计算标签高度

 import UIKit

func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
 let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.greatestFiniteMagnitude))
 label.numberOfLines = 0
 label.lineBreakMode = NSLineBreakMode.byWordWrapping
 label.font = font
 label.text = text

 label.sizeToFit()
 return label.frame.height
}

let font = UIFont(name: "Helvetica", size: 20.0)
var height = heightForView("This is just a load of text", font: font, width: 60)

你在使用AutoLayout吗?是的,我在stroryBoard中使用过它,但还没有编程使用过它,我应该在“heigh”中传递什么?你可以将任何值传递到“heigh”,因为sizeToFit()函数将再次调整高度以适应内容。这对我来说非常有用!我使用了刚刚为Swift更新的相同代码3@MayPhyu我刚刚编辑了一个更新,当它通过审查时应该在这里,如果你仍然需要它!我认为这对你有帮助
NSString(string: "hello this is a string").boundingRect(
        with: CGSize(width: width, height: .greatestFiniteMagnitude),
        options: .usesLineFragmentOrigin,
        attributes: [.font: self],
        context: nil).size
extension UILabel {

    func heightForLabel(text:String, font:UIFont, width:CGFloat) -> CGFloat {
        let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
        label.numberOfLines = 0
        label.lineBreakMode = NSLineBreakMode.byWordWrapping
        label.font = font
        label.text = text

        label.sizeToFit()
        return label.frame.height
    }

}
 import UIKit

func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
 let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.greatestFiniteMagnitude))
 label.numberOfLines = 0
 label.lineBreakMode = NSLineBreakMode.byWordWrapping
 label.font = font
 label.text = text

 label.sizeToFit()
 return label.frame.height
}

let font = UIFont(name: "Helvetica", size: 20.0)
var height = heightForView("This is just a load of text", font: font, width: 60)