Границы, возвращаемые 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...