iOS - Получить «реальную» высоту буквы - PullRequest
11 голосов
/ 26 января 2012

Я пытаюсь расположить текст в UIView.

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

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

p with sizeWithFont

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

p with font.pointSize

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

p with font.pointSize

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

Спасибо

Шани

Ответы [ 3 ]

20 голосов
/ 26 января 2012

Существует множество свойств на UIFont, которые могут помочь в этой ситуации:

  • pointSize
  • ascender
  • descender
  • capHeight
  • xHeight
  • lineHeight
3 голосов
/ 26 января 2012

Вы можете преобразовать UILabel в UIImage с помощью функции "printscreen", а затем проверять пиксели по одному (например, с помощью: Как получить данные пикселей из UIImage (Какао)Нажмите) или CGImage (Core Graphics)? ) и «вычислите» левый верх и правый нижний.

2 голосов
/ 12 сентября 2014

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