public extension UILabel {
public func getLinesArrayOfStringWidth(_ width: CGFloat) -> [String]? {
guard let str = text, str.isEmpty == false, let font = font else {
return nil
}
var linesArr = [String]()
let myFont = CTFontCreateWithName(font.fontName as CFString, font.pointSize, nil)
let attStr = NSMutableAttributedString(string: str)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byCharWrapping
attStr.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: NSMakeRange(0, str.count))
attStr.addAttribute( NSAttributedString.Key(kCTFontAttributeName as String), value: myFont, range: NSMakeRange(0, str.count))
let frameSetter = CTFramesetterCreateWithAttributedString(attStr)
let path = CGMutablePath()
path.addRect(CGRect(x: 0, y: 0, width: width, height: 10000))
let frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, nil)
if let lines = CTFrameGetLines(frame) as? [CTLine] {
lines.forEach { (line: CTLine) in
let lineRange = CTLineGetStringRange(line)
let lineStr = (str as NSString).substring(with: NSMakeRange(lineRange.location, lineRange.length))
CFAttributedStringSetAttribute(attStr, lineRange, kCTKernAttributeName, NSNumber(value: 0) as CFTypeRef)
CFAttributedStringSetAttribute(attStr, lineRange, kCTKernAttributeName, NSNumber(value: 0) as CFTypeRef)
linesArr.append(lineStr)
}
}
return linesArr
}
}
iOS获取UILabel每行文字
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 最近在项目中遇到需要在UILabel上显示两种类型的数据的需求 第一种数据:最多显示2行且2行表示不完的情况下结尾...
- 今天参加迪卡侬组织的神灵寨滑雪活动,本以为儿子会很兴奋的和我一起参加。可没想到,昨天晚上告诉她时。他却说不想去,太...