如何找到可自动生长的UILabel的实际高度

时间:2018-05-03 07:57:45

标签: ios uilabel height ios-autolayout

我已经为UIlabel提供了零行数,以便其高度根据其内容进行调整。

有时如果我给出一个大文本,它会在UI中增长到4行但是当我访问它

  

frame.size.height

它返回21而不是实际高度,这比那更大。

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:1)

在View Controller中,您可以使用通知您有关布局完成的方法:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        print("frame = \(label.frame)")
    }

答案 1 :(得分:1)

swift

public  static func requiredHeightForLabel(text : String, font : UIFont, width : CGFloat)   -> CGFloat {

    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))//UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = font
    label.text = text

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

目标c

+(CGFloat)getLabelHeightForString:(NSString *)string font:(UIFont *)font 
{
CGSize size = CGSizeMake(lablwidth, MAXFLOAT);

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];

CGSize boundingBox = [string boundingRectWithSize:size

                                          options:NSStringDrawingUsesLineFragmentOrigin

                                       attributes:@{NSFontAttributeName:font}

                                          context:context].size;

size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

return size.width;

}