获取UILabel每一行的文字内容

获取UILabel每一行的文字内容

需要引入CoreText框架

#import <CoreText/CoreText.h>

具体实现如下,返回一个数组,存放每一行的问题本内容,根据Label的尺寸获取

- (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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,206评论 4 61
  • package com.selenium.gen; import java.io.File; import jav...
    红木杉2018阅读 3,077评论 0 0
  • 小时候,总爱问父亲:为什么杭州的天不黑啊?他说那是因为有灯。有灯?对的,因为有灯。 那时的我并不明白,为什么杭州的...
    落果果阅读 1,813评论 0 1
  • 当空烈日锄耕耘,白云悠悠拔拔草。作物有这草长得快多好[捂脸]
    一路凯歌1阅读 2,435评论 2 1
  • 梧桐深巷锁轩窗, 枯藤陌上凝冷霜。 小童戏水池边上, 忽闻清秋桂子香。 (配图是自己拍的,不符诗意)
    Gordo阅读 1,599评论 0 2