iOS- Label多行时获取每一行文字

获取每一行的文字

#import <CoreText/CoreText.h>
- (NSArray *)getSeparatedLinesFromLabel:(UILabel *)label { 
    NSString *text = [label text];
    UIFont *font = [label font];
    CGRect rect = [label bounds]; 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,MAXFLOAT)); 
    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; 
}

lineBreakMode:设置标签文字过长时的显示方式。   
label.lineBreakMode = NSLineBreakByCharWrapping;    //以字符为显示单位显示,后面部分省略不显示。   
label.lineBreakMode = NSLineBreakByClipping;        //剪切与文本宽度相同的内容长度,后半部分被删除。   
label.lineBreakMode = NSLineBreakByTruncatingHead;  //前面部分文字以……方式省略,显示尾部文字内容。   
label.lineBreakMode = NSLineBreakByTruncatingMiddle;    //中间的内容以……方式省略,显示头尾的文字内容。   
label.lineBreakMode = NSLineBreakByTruncatingTail;  //结尾部分的内容以……方式省略,显示头的文字内容。   
label.lineBreakMode = NSLineBreakByWordWrapping;    //以单词为显示单位显示,后面部分省略不显示。  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容