在开发中我们经常会遇到动态计算文字宽度和高度,相信大家对这个方法也都非常熟悉,
boundingRectWithSize(size: CGSize, options: NSStringDrawingOptions, attributes: [String : AnyObject]?, context: NSStringDrawingContext?) -> CGRect
这个方法通过指定size和属性可以计算出文字的宽度和高度,就像这样:
string.boundingRectWithSize(size,options: .UsesLineFragmentOrigin,attributes
[NSFontAttributeName:font],context: nil).size
但是如果需要在每行文字之间都指定行间距时这个算法得出的结果就会和实际有偏差,关于label文字设置行间距方法如下:
let paragraphStyle = NSMutableParagraphStyle()
//指定行间距
paragraphStyle.lineSpacing = 10
let attrStr = NSMutableAttributedString(string: topic!.text!)
attrStr.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: NSMakeRange(0, topic!.text!.characters.count))
label.attributedText = attrStr
如果这样设置确实可以做到label每行文字之间10的间距,但是用上面的那个方法得出的size就会有偏差,解决方案其实很简单,就是在计算方法的attributes属性里设置NSParagraphStyleAttributeName这个属性的值,就像这样:
let paragraph = NSMutableParagraphStyle()
paragraph.lineSpacing = 10
let size = string.boundingRectWithSize(size,options: .UsesLineFragmentOrigin,
attributes: [NSFontAttributeName:font,NSParagraphStyleAttributeName:paragraph],
context: nil).size
如此一来得出的size就会包含指定距离为10的行间距。