zoukankan      html  css  js  c++  java
  • 30、准确计算CoreText高度的方法

    http://ios-iphone.diandian.com/post/2012-03-29/18389515

    - (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  

  • 相关阅读:
    Run command in YMAL build pipeline or Release Pipeline
    Create Pipeline for Azure Apps
    Deploy Azure App Service with VS Code
    多线程总结笔记
    @Param注解
    Mac Idea2018.1破解
    空指针异常Caused by: java.lang.NullPointerException: null
    java集合面试题
    在IntelliJ IDEA中使用git
    分支管理
  • 原文地址:https://www.cnblogs.com/xuejinhui/p/4768342.html
Copyright © 2011-2022 走看看