Ответ 1
В UIFont
есть много свойств, чтобы помочь в этой ситуации:
-
pointSize
-
ascender
-
descender
-
capHeight
-
xHeight
-
lineHeight
Я пытаюсь разместить текст на UIView.
(Желтая область - это рамка UILabel с фоновым цветом).
Когда я использую sizeWithFont, я получаю это, у которого очень большое пространство над буквой:
Когда я использую font.pointSize
, я получаю это для "i", что хорошо -
НО Когда я использую его для "р", я получаю точную высоту, но буква рисуется снизу и обрезается.
** Как я могу получить глиф только в центре кадра? **
Спасибо
Шани
В UIFont
есть много свойств, чтобы помочь в этой ситуации:
pointSize
ascender
descender
capHeight
xHeight
lineHeight
Вы можете преобразовать UILabel
в UIImage
с помощью функции типа "printscreen", а затем проверить пиксели по одному (например, Как получить пиксельные данные из UIImage (Cocoa Touch) или CGImage (Core Graphics)?) и "вычислить" левый верхний правый нижний.
Попробуйте переместить текст вверх по font.ascender - font.capHeight. Уменьшение высоты UILabel, скорее всего, закрепит его содержимое, поэтому лучше изменить положение метки y вместо изменения размера.
В следующем примере кода объясняется используемое мной вычисление:
// in UILabel subclass:
- (CGFloat) topPadding
{
// ascender = height from baseline to top of label (including top padding)
// capHeight = height of a capital letter = ascender - top padding
// -> top padding = ascender - capHeight
return self.font.ascender - self.font.capHeight;
}