IOS - получить "реальную" высоту буквы

Я пытаюсь разместить текст на UIView.

(Желтая область - это рамка UILabel с фоновым цветом).

Когда я использую sizeWithFont, я получаю это, у которого очень большое пространство над буквой:

p with sizeWithFont

Когда я использую font.pointSize, я получаю это для "i", что хорошо -

p with font.pointSize

НО Когда я использую его для "р", я получаю точную высоту, но буква рисуется снизу и обрезается.

p with font.pointSize

** Как я могу получить глиф только в центре кадра? **

Спасибо

Шани

Ответ 1

В UIFont есть много свойств, чтобы помочь в этой ситуации:

  • pointSize
  • ascender
  • descender
  • capHeight
  • xHeight
  • lineHeight

Ответ 3

Попробуйте переместить текст вверх по 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;
}