iOS 获取label每行显示内容数组及行数

开发时,经常会需要用到label行数来做某些操作,如下方法,给label添加分类方法,可以获得一个该label当前显示的每行内容的数组,如果需要行数,那么直接去array的count就可以了。


-(NSArray*)getSeparatedLinesFromLabel {

NSString *text = [self text];

UIFont *font = [self font];

CGRect rect = [self frame];

CTFontRef myFont = CTFontCreateWithName((__bridge CFStringRef)([font fontName]), [font pointSize],NULL);

NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:text];

[attStr addAttribute:(NSString*)kCTFontAttributeName value:(__bridge id)myFont range:NSMakeRange(0, attStr.length)];

CTFramesetterRef frameSetter =CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef) attStr);

CGMutablePathRef path =CGPathCreateMutable();

CGPathAddRect(path, NULL, CGRectMake(0,0,rect.size.width,100000));

CTFrameRef frame =CTFramesetterCreateFrame(frameSetter,CFRangeMake(0,0), path,NULL);

NSArray* lines = (__bridge NSArray*)CTFrameGetLines(frame);

NSMutableArray *linesArray = [[NSMutableArray alloc] init];

for(id line in lines)

{

CTLineRef lineRef = (__bridge CTLineRef)line;

CFRange lineRange = CTLineGetStringRange(lineRef);

NSRange range =NSMakeRange(lineRange.location, lineRange.length);

NSString *lineString = [text substringWithRange:range];

[linesArray addObject:lineString];

}

return (NSArray*)linesArray;

}

文章参照链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容