即時通訊嘗試使用LineSpacing屬性計算UILabel的高度。奇怪的是,正常label.text的高度的計算值低於label.attributedText及其lineheight。它看起來像我做錯了什麼,但無法找到什麼,所以請幫助:D。如何用線間距動態計算nsattributed字符串的高度
提供的代碼是專門爲SO編寫的,它使代碼緊湊和清晰,在我的項目中執行的方式不同。
extension NSAttributedString {
func heightWithWidth(width: CGFloat) -> CGFloat {
let maxSize = CGSize(width: width, height: CGFloat.max)
let boundingBox = self.boundingRectWithSize(maxSize, options: [.UsesLineFragmentOrigin, .UsesFontLeading, .UsesDeviceMetrics], context: nil)
return boundingBox.height
}
}
extension UILabel {
func getHeightWidthGivenWidthAndLineHeight(lineHeight: CGFloat, labelWidth: CGFloat) -> CGFloat {
let text = self.text
if let text = text {
let attributeString = NSMutableAttributedString(string: text)
let style = NSMutableParagraphStyle()
style.lineSpacing = lineHeight
attributeString.addAttribute(NSParagraphStyleAttributeName, value: style, range: NSMakeRange(0, text.characters.count))
let height = attributeString.heightWithWidth(labelWidth)
self.attributedText = attributeString
return height
}
return 0
}
我通過
let contentHeight = contentLabel.text! == "" ? 0 : contentLabel.getHeightWidthGivenWidthAndLineHeight(3, labelWidth: labelWidth)
調用此方法,正常工作的字符串(無間距)完美的作品,當我用lineSpacing如果失敗TE計算正確的值attributedstring。
Thanx,不知道SizeThatFits()工作方式:)。我更新我的擴展以設置行高並通過使用SizeThatFits()返回uilabel所需的高度 – MQoder