给定字体大小,文本和最大宽度,调用后获取每行要展示的文本数组
func getTextLines(text:String,font:UIFont,maxWidth:CGFloat) -> [String] {
let labelText = text
// 构建属性字符串
let attributedString = NSAttributedString(string: labelText, attributes: [NSAttributedString.Key.font: font])
// 创建绘制区域
let rect = CGRect(origin: .zero, size: CGSize(width: maxWidth, height: CGFloat.greatestFiniteMagnitude))
// 创建CTFramesetter
let framesetter = CTFramesetterCreateWithAttributedString(attributedString as CFAttributedString)
// 创建CTFrame
let path = CGPath(rect: rect, transform: nil)
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, nil)
// 获取CTLine数组
let lines = CTFrameGetLines(frame) as! [CTLine]
// 转换每个CTLine到String
var lineTexts: [String] = []
lines.forEach { (line) in
let lineRange = CTLineGetStringRange(line)
let range = NSRange(location: lineRange.location, length: lineRange.length)
let lineString = (labelText as NSString).substring(with: range)
lineTexts.append(lineString)
}
return lineTexts
}