返回的CTLineGetTypographicBounds()
边界与图像边界不同。顾名思义,(以及Иван的回答)暗示,上升等是为字体定义的,不会根据字符串而改变。例如,如果您想在多行文本中找到正确的行高,则可以使用它,因为行高通常不应取决于您使用的确切字符。
CTLineGetImageBounds()
另一方面,返回完全适合图像的边界。例如,如果您想围绕一条线绘制一个框,这就是您所需要的。
CTLineGetImageBounds()
需要一个上下文,因为可能存在文本转换之类的东西。如果您不想担心这一点,只需使用虚拟上下文即可。例如:
CTLineRef line;
// create the line...
UIGraphicsBeginImageContext(CGSizeMake(1, 1));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextPosition(context, 0, 0);
CGRect bounds = CTLineGetImageBounds(line, context);
UIGraphicsEndImageContext();
// use bounds...