调整UILabel的高度以适应文本

我有UILabel在我的单元格子类,这是假设拥有一个标题。 标题的大小可以是不同的长度,因此我需要调整UILabel以适应文本,并防止文本不长,我也需要能够设置maxHeight。 宽度应该是一样的。 我怎样才能在swift中创build这样的代码在tableViewCell子类?

到目前为止,我在awakeFromNib中有这个

theTitleLabel?.font = UIFont(name: "HelveticaNeue", size: 13) theTitleLabel?.textColor = UIColor(rgba: "#4F4E4F") theTitleLabel?.numberOfLines = 0 theTitleLabel?.lineBreakMode = NSLineBreakMode.ByTruncatingTail 

最简单的方法是使用自动布局约束。 你使用的是awakeFromNib ,所以我假设你在Interface Builder(xib或storyboard文件)中有这个单元。

如果你可以避免,不要在你的代码中设置你的视图。 在界面生成器中做起来要容易得多。

  1. find你的标签,并在Interface Builder中设置它的属性(字体,颜色,换行符等)。

  2. 添加宽度约束(或左右边距的约束,取决于你想要的)。

  3. 添加高度约束,将其关系从= (equals)更改为< (less than)

你完成了,不需要代码。

  CGSize maximumLabelSize = CGSizeMake(MAX_WIDTH, MAX_HEIGHT); CGSize expectedSize = [lbl sizeThatFits:maximumLabelSize]; CGSize s = CGSizeMake(STATIC_WIDTH, expectedSize.height); yourLabel.frame = CGRectMake(yourLabel.frame.origin.x, nameLbl.frame.origin.y, s.width, s.height); 

Swift 2版本,来自Zigglzworth的回答:

 let maximumLabelSize = CGSizeMake(maxWidth, maxHeight); let expectedSize = theLabel.sizeThatFits(maximumLabelSize) theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedSize.width, expectedSize.height) 
 let lblMassage = UILable() lblMassage.text ="Resizing the height of UILabel to fit text.................." lblMassage.numberOfLines = 0 lblMassage.lineBreakMode = NSLineBreakMode.byTruncatingTail lblMassage.preferredMaxLayoutWidth = 190 lblMassage.sizeToFit()