假设您有一个包含一些随机数量的不同字体的NSAttributedString。对于普通文本,您可以使用
boundingRect(
with size: CGSize,
options: NSStringDrawingOptions = [],
attributes: [NSAttributedStringKey : Any]? = nil,
context: NSStringDrawingContext?
)来计算它的高度。
但是,如何计算包含多种字体的NSAttributedString呢?例如,位置0到5具有UIFont.systemFont(with: 15),位置6到10具有UIFont.systemFont(with: 17),位置11到16具有UIFont.systemFont(with: 5)。
由于boundingRect方法无法识别哪些属性适用于什么范围,因此无法使用它。我还能做些什么来实现这一点?
发布于 2021-10-19 15:41:24
我试图找到类似的解决方案,但没有一个例子不能帮助我。在我的例子中,我使用了包装HTML文本的UITextView,并且我需要根据内容计算textView的高度。该HTML文本包含一些字符串,不同的样式和字体。以下是我实现的一个解决方案,或者可能是一个技巧:
func calculateHeight(withConstrainedWidth width: CGFloat, string: NSAttributedString) -> CGFloat {
let textView: UITextView = UITextView(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude))
textView.attributedText = string
textView.sizeToFit()
textView.layoutIfNeeded()
return textView.contentSize.height
}我不建议您在复杂的布局中使用此代码,例如在UICollectionViewCell中,如果某些内容有很多项的话。它会影响应用程序的性能。但对于单次检查,它可能是相关的。也许这会有所帮助。
https://stackoverflow.com/questions/51095550
复制相似问题