Adjust UILabel height to text

I have some labels which I want to adjust their height to the text, this is the code I wrote for this now

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
}

EDIT:

The issue was not in this piece of code, so my fix is in the question itself. It might still be useful for others!


I've just put this in a playground and it works for me.

import UIKit

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
}

let font = UIFont(name: "Helvetica", size: 20.0)

var height = heightForView("This is just a load of text", font: font, width: 100.0)

Swift 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
}

在这里输入图像描述


If you are using AutoLayout , you can adjust UILabel height by config UI only.

For iOS8 or above

  • Set constraint leading/trailing for your UILabel
  • And change the lines of UILabel from 1 to 0
  • For iOS7

  • First, you need to add contains height for UILabel
  • Then, modify the Relation from Equal to Greater than or Equal
  • 在这里输入图像描述

  • Finally, change the lines of UILabel from 1 to 0
  • Your UILabel will automatically increase height depending on the text


    如果你愿意,我可以创建这个扩展

    extension UILabel {
        func setSizeFont (sizeFont: CGFloat) {
            self.font =  UIFont(name: self.font.fontName, size: sizeFont)!
            self.sizeToFit()
        }
    }
    
    链接地址: http://www.djcxy.com/p/28206.html

    上一篇: 获取UILabel iOS8中的行数

    下一篇: 将UILabel高度调整为文字