问题 如何在swift中以编程方式为UIlabel提供动态高度?


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

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


4111
2017-07-05 09:16


起源

你在使用AutoLayout吗? - Bannings
是的,我在stroryBoard中使用它,但是还没有以编程方式使用它, - sss


答案:


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,请给出你的最大行数。这里非常重要。


6
2017-07-05 09:37



我应该在“高度”中传递什么? - sss
您可以将任何值传递给“height”,因为sizeToFit()函数将再次调整高度以适合内容。 - Amro Shafie


获取标签高度取决于您分配给它的文本,字体和宽度:

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!

3
2017-11-04 08:29



这对我很有用!我使用了为Swift 3更新的相同代码 - Simon
我可以获得这个兄弟@Simon的快速3代码吗? - May Phyu
@May Phyu我刚刚编辑了它的更新,如果你仍然需要它应该在这里进行审查! - Josh Heald


    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)

3
2017-07-28 13:02





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)

您可以在代码中使用自动布局。 请参阅自动布局指南


1
2017-07-05 12:17





let label:UILabel = UILabel()

                                        label.textColor=UIColor.black
                                        label.font = UIFont(name: "Halvetica", size: 17)
                                        label.numberOfLines = 1

                                        label.text = item.name
                                        label.sizeToFit()

                                        label.frame = CGRect(x: 5, y: imageView.frame.height+10, width: 50, height:label.frame.height)

1
2017-11-20 07:24



我认为它对你有帮助 - D.l.Prasad


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
    }

}

参考: 将UILabel高度调整为文本


1
2018-06-09 09:21





NSString(string: "hello this is a string").boundingRect(
        with: CGSize(width: width, height: .greatestFiniteMagnitude),
        options: .usesLineFragmentOrigin,
        attributes: [.font: self],
        context: nil).size

使用此方法可以确定字符串的大小。放入最大高度和最大宽度 CGSize(widhth,height) 它会回来 CGSize 包含高度和宽度的对象。根据您的方案使用它


0
2017-11-20 11:27