zoukankan      html  css  js  c++  java
  • iOS开发 准确计算Coretext高度

    - (int)getAttributedStringHeightWithString:(NSAttributedString *)  string  WidthValue:(int) width
    {
       int total_height = 0;
       
       CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);    //string 为要计算高度的NSAttributedString
       CGRect drawingRect = CGRectMake(0, 0, width, 1000);  //这里的高要设置足够大
       CGMutablePathRef path = CGPathCreateMutable();
       CGPathAddRect(path, NULL, drawingRect);
       CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter,CFRangeMake(0,0), path, NULL);
       CGPathRelease(path);
       CFRelease(framesetter);
       
       NSArray *linesArray = (NSArray *) CTFrameGetLines(textFrame);
       
       CGPoint origins[[linesArray count]];
       CTFrameGetLineOrigins(textFrame, CFRangeMake(0, 0), origins);
       
       int line_y = (int) origins[[linesArray count] -1].y;  //最后一行line的原点y坐标
       
       CGFloat ascent;
       CGFloat descent;
       CGFloat leading;
       
       CTLineRef line = (CTLineRef) [linesArray objectAtIndex:[linesArray count]-1];
       CTLineGetTypographicBounds(line, &ascent, &descent, &leading);
       
       total_height = 1000 - line_y + (int) descent +1;    //+1为了纠正descent转换成int小数点后舍去的值
       
       CFRelease(textFrame);
       
       return total_height;
       
    }

    //关于line坐标位置y为下图黑线所在位置 descent为黑线下部分字体的高度

    //关于字体各部分高度说明  http://ios-iphone.diandian.com/post/2012-03-29/18055023 

  • 相关阅读:
    2020.12.17
    2020.12.16
    2020.12.15
    2020.12.13
    JavaScript变量:
    第二十七章 ansible变量介绍
    今日收获
    今日收获
    今日收获
    今日收获
  • 原文地址:https://www.cnblogs.com/moyunmo/p/3603024.html
Copyright © 2011-2022 走看看