Работа с точками или пикселями при использовании UIFont - PullRequest
1 голос
/ 16 апреля 2011

Я пытался расположить строку в вертикальном центре 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];

Сначала я предположил, что найдет разницу в высоте между моим прямоугольником и шрифтом, затем смещение шрифта на половину этой высоты должно дать мне позицию в"sweet spot".

Однако capHeight находится в точках, а rectHeight в пикселях, поэтому это решение отчасти работает для шрифтов в диапазоне размеров 12-15.После этого различие начало позиционировать строку за пределами прямоугольника.

Я повторил это несколько раз, и единственным способом последовательного правильного позиционирования строки оказался «взлом», который действителен, но делаетНе удивляет читаемость кода:

CGFloat diffHeightRectAndFont = rectHeight - [[NSString stringWithString:@"F"] sizeWithFont:font].height;

Существует ли более прямой способ получения высоты пикселя заглавной буквы с использованием определенного шрифта?

Спасибо заранее :) 1020 *

1 Ответ

1 голос
/ 29 августа 2012

Я знаю, что немного поздно. но тем не менее мой ответ моя помощь кому-то еще.

NSString имеет метод sizeWithFont: (задокументированный здесь ), который, я думаю, может быть использован для этого. Он возвращает структуру CGSize, так что вы можете сделать что-то похожее на следующее, чтобы найти высоту текста внутри вашего ярлыка.

CGSize textSize = [[текст метки] sizeWithFont: [шрифт метки]];

CGFloat heightOfStringWithSpecifiedFont = textSize.height;

UILabel имеет свойство шрифта, которое вы можете использовать для динамического получения сведений о шрифте для вашего ярлыка, как я делал выше.

Надеюсь, это поможет:)

...