Я пытался расположить строку в вертикальном центре CGRect в моем методе drawRect:(CGRect).
CGRect имеет такой размер:
CGRect rect = CGRectMake(0.0f, 0.0f, rectWidth, rectHeight);
Чтобы нарисовать строку так, чтобы она была по центру, я сначала попробовал это:
CGFloat diffHeightRectAndFont = rectHeight - font.capHeight;
[str drawAtPoint:CGPointMake(0.0f, diffHeightRectAndFont * 0.5f) withFont:font];
Я сначала предположил, что это найдет разницу в высоте между моим прямоугольником и шрифтом, а затем смещение шрифта на половину этой высоты должно дать позицию y в «наилучшем месте».
Однако capHeight указывается в пунктах, а rectHeight — в пикселях, поэтому это решение работает для шрифтов размером 12–15. После этого разница начала позиционировать строку за пределами прямоугольника.
Я просмотрел это несколько раз, и единственным способом последовательного правильного позиционирования строки оказался этот «хак», который действителен, но не творит чудес с читабельностью кода:
CGFloat diffHeightRectAndFont = rectHeight - [[NSString stringWithString:@"F"] sizeWithFont:font].height;
Есть ли более прямой способ получить высоту заглавной буквы в пикселях с помощью определенного шрифта?
Заранее спасибо:)