Получить базовую позицию строки в ее ограничительной рамке

Я использую sizeWithAttributes для того, чтобы получить width а также height требуется для того, чтобы нарисовать NSAttributedString, Это хорошо работает, чтобы получить width поскольку значение, возвращаемое для ширины, очень удобно соответствует символам - оно рассчитывается от первого символа до последнего без добавления дополнительного отступа. Но для height, он возвращает значение больше, чем я хотел бы. Это потому, что он должен рассчитать height начиная с верхней части самой высокой буквы и продолжая вниз до нижней части самого нижнего символа - например, символ g простирается ниже базовой линии.

Я не верю, что этот API "интеллектуален", потому что ни один из символов в моей строке не выходит за базовую линию, но возвращаемая высота слишком высокая. Кажется, он рассматривает любой возможный символ, который может отображаться с этими атрибутами.

Мне нужен способ вычесть количество "дополнительных отступов" ниже строки. Я хочу рассчитать, где базовая линия относительно heightили каким-либо другим способом вычислить, сколько места выделено для области под базовой линией. Иллюстрация ниже визуально объясняет, что, по моему мнению, происходит, хотя величина заполнения немного экстремальна.

-------------

--greetings--
              <-get rid of this 'extra' padding
-------------

я верю boundingRectWithSize:options:context: дал бы мне те же размеры, и я не знаю ни о каком другом (не устаревшем) API, который вычисляет размеры строк.

1 ответ

Решение

UIFont имеет атрибуты ascender (высота над базовой линией) и descender (отрицательный, высота ниже базовой линии). Это, наверное, то, что вы ищете.

Другие вопросы по тегам