将UILabel高度调整为文本

我有一些标签要根据文本调整高度,这是我现在为此编写的代码


func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{

    let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))

    label.numberOfLines = 0

    label.lineBreakMode = NSLineBreakMode.ByWordWrapping

    label.font = font

    label.text = text


    label.sizeToFit()

    return label.frame.height

}

编辑:


问题不在这段代码中,所以我的解决方法是问题本身。它可能对其他人仍然有用!


慕斯王
浏览 506回答 3
3回答

人到中年有点甜

我刚把它放在操场上,对我有用。为Swift 4.0更新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: 100.0)斯威夫特3:func heightForView(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}

白猪掌柜的

如果使用的是AutoLayout,则UILabel只能通过config UI 调整高度。对于iOS8或更高版本为您设置约束条件领先/追踪 UILabel并将行UILabel从1 更改为0对于iOS7首先,您需要添加包含高度UILabel然后,将关系从修改Equal为Greater than or Equal最后,将行UILabel从1 更改为0您UILabel将根据文本自动增加高度

慕妹3146593

我有很强的工作解决方案。在layoutSubviews中:    _title.frame = CGRect(x: 0, y: 0, width: bounds.width, height: 0)    _title.sizeToFit()    _title.frame.size = _title.bounds.size在文本设置器中:    _title.text = newValue    setNeedsLayout()UPD。 当然可以使用以下UILabel设置:    _title.lineBreakMode = .ByWordWrapping    _title.numberOfLines = 0
打开App,查看更多内容
随时随地看视频慕课网APP