im пытается вычислить высоту UILabel с атрибутом LineSpacing. Странно то, что вычисленное значение высоты нормального ярлыка .text ниже, чем label.attributedText с его линией. похоже, что я делаю что-то неправильно, но не могу найти что-нибудь, поэтому, пожалуйста, помогите: 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)
Работа с нормальными строками (без пробелов), отлично работает, когда я использую attributedstring с LineSpacing, если не удается тэ вычислить правильное значение.
Thanx, не знал, что SizeThatFits() работал таким образом :). Я обновляю расширение, чтобы установить высоту строки и вернуть высоту, необходимую для uilabel, используя SizeThatFits() – MQoder