func getaLineAllStrings(textWidth:CGFloat,textFont:UIFont,lineSpacing:CGFloat,paragraphSpacing:CGFloat,lineBreakMode:NSLineBreakMode) -> [String] {
var paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineSpacing
paragraphStyle.paragraphSpacing = paragraphSpacing
paragraphStyle.lineBreakMode = lineBreakMode
paragraphStyle.alignment = .justified //左右对齐方式
var attributeStr = NSMutableAttributedString(string: self)
attributeStr.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSRange(location: 0, length: self.count))
attributeStr.addAttribute(.font, value: textFont, range: NSRange(location: 0, length: self.count))
var frameSetter: CTFramesetter? = nil
if let str = attributeStr as? CFAttributedString {
frameSetter = CTFramesetterCreateWithAttributedString(str)
}
let path = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: textWidth, height: CGFloat.greatestFiniteMagnitude), transform: .identity)
var frame: CTFrame? = nil
if let frameSetter = frameSetter {
frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(CFIndex(0), CFIndex(0)), path, nil)
}
let lines = CTFrameGetLines(frame!) as? [AnyHashable]
var linesArray: [String] = []
for line in lines ?? [] {
let lineRef = line as! CTLine
var lineRange: CFRange? = nil
lineRange = CTLineGetStringRange(lineRef)
let range = NSRange(location: lineRange?.location ?? 0, length: lineRange?.length ?? 0)
let indexStart = self.index(self.startIndex, offsetBy: range.location)
let indexEnd = self.index(self.startIndex, offsetBy:(range.location + range.length),limitedBy: self.endIndex)! let lineString = self[indexStart ..< indexEnd] linesArray.append(String(lineString))
} return linesArray
}