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

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

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

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

p с sizeWithFont

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

p с помощью font.pointSize

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

p с помощью font.pointSize

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

Спасибо

Шани

3 ответа

Решение

Есть много свойств на 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;
}
Другие вопросы по тегам