带有NSAttributedString的UILabel返回不正确的boundingRect值

时间:2017-01-17 16:13:24

标签: swift cocoa-touch uilabel nsattributedstring

func calculateSizeFor(label:UILabel, attributedText: NSAttributedString) -> CGSize {
    let constraint:CGSize = CGSize(width: label.frame.size.width,
                                   height: .greatestFiniteMagnitude)
    let context:NSStringDrawingContext = NSStringDrawingContext()
    let boundingBox = attributedText.boundingRect(with: constraint,
                                                  options: [.usesLineFragmentOrigin,
                                                            .usesFontLeading],
                                                  context: context)
    return boundingBox.size
}

高度值始终大于实际高度,导致UILabel的顶部和底部边缘有额外的填充。而当我尝试为纯文本计算boundingRect时,返回的值总是精确的。

我需要预先计算标签高度,以便将其显示为UICollectionViewCell组件。

我在这里遗漏了什么?还有另一种方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:0)

同一问题,attr字符串的末尾可能会有一个'\ n', 由

之类的标签引起,我认为, 通过删除最后一个字符来解决:

let mattrStr: NSMutableAttributedString = NSMutableAttributedString(attributedString: yourAttrStr)
if let lc = attrStr.string.last, lc == "\n" {
    mattrStr.deleteCharacters(in: NSRange(location: mattrStr.length - 1, length: 1))
}