UILabel多行文本高度计算

多行文本高度的计算在开发过程中经常会用到,一般都是使用boundingRect(with:options:attributes:)方法来计算高度。

// 根据字体计算size
func size(drawIn size: CGSize, font: UIFont, options: NSStringDrawingOptions = .usesLineFragmentOrigin, lineBreak: NSLineBreakMode = .byCharWrapping) -> CGSize {
    let paragraph = NSMutableParagraphStyle()
    paragraph.lineBreakMode = lineBreak
    let dic = [NSAttributedStringKey.font: font, NSAttributedStringKey.paragraphStyle: paragraph]
    let bounds = NSAttributedString(string: self, attributes: dic).boundingRect(with: size, options: options, context: nil)
    return bounds.size
}

size: label的size,如果想要高度自适应,就传CGFloat(MAXFLOAT),宽度为label的宽度
lineBreak:这个要和label的lineBreakModel一样,计算才会准确

在使用的时候,会发现在计算中英混合字符串的时候会不准确。这个是label的lineBreakModel失效引起的,只需要在赋值后再设置一次lineBreakModel属性就可以了。

label.attributedText = NSAttributedString(string: "备注: \(notes)", attributes: nil)
label.lineBreakMode = .byCharWrapping
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容