获得多行UILabel的每一行Text

支持中英文都没问题,使用的是CoreText处理,需要引入CoreText框架,并且 

#import <CoreText/CoreText.h>


+ ( NSArray  *) getSeparatedLinesFromLabel:( UILabel  *) label
{
     NSString  * text  =  [ label  text ];
     UIFont     * font  =  [ label  font ];
     CGRect      rect  =  [ label  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;
}

用这个方法就可以得到UILabel的最后一行文字,那样就可以计算得UILabel最后一行文字的宽度,就可以定位到最后一个文字的位置。这样的话,就可以应付变态的产品经理了,比如可以在文字的后面紧跟着贴一个icon什么的了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值