【问题标题】:UILabel with NSAttributedString returns incorrect boundingRect value带有 NSAttributedString 的 UILabel 返回不正确的 boundingRect 值
【发布时间】:2017-01-17 16:13:23
【问题描述】:
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 组件。

我在这里遗漏了什么吗?还有其他方法可以实现吗?

【问题讨论】:

  • 我现在遇到了类似的问题,尺寸(宽度和高度)错误。你找到解决办法了吗?

标签: swift cocoa-touch uilabel nsattributedstring


【解决方案1】:

同样的问题,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))
}

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2014-11-26
    • 2016-10-09
    • 2021-10-26
    • 2015-10-13
    相关资源
    最近更新 更多