開發(fā)時瓦哎,經常會需要用到label行數(shù)來做某些操作唉韭,如下方法,給label添加分類方法畜隶,可以獲得一個該label當前顯示的每行內容的數(shù)組壁肋,如果需要行數(shù),那么直接去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;
}
文章參照鏈接