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
组件。
我在这里遗漏了什么?还有另一种方法可以达到这个目的吗?
答案 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))
}