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行表示不完的情况下结尾...
- 今天参加迪卡侬组织的神灵寨滑雪活动,本以为儿子会很兴奋的和我一起参加。可没想到,昨天晚上告诉她时。他却说不想去,太...