Всегда получать одинаковую высоту, используя sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode: - PullRequest
2 голосов
/ 04 сентября 2010

CGSize, возвращаемый функцией sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode: всегда содержит одинаковую высоту. Почему это так, и есть ли способ обойти это?

Я хочу выровнять строку по вертикали, и она не может быть усечена, если только она не может поместиться на одной строке с использованием минимального размера шрифта. Поэтому я пытаюсь использовать этот метод, чтобы получить высоту строки, но она всегда возвращает 57px, независимо от того, каков currentFontSize.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 22 ноября 2012

Как только у вас есть actualFontSize от sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:

Затем вы можете рассчитать высоту, необходимую для рендеринга, используя:

CGFloat actualHeight = [font fontWithSize:actualFontSize].ascender-[font fontWithSize:actualFontSize].descender;

(я нашел эту страницу , полезную для понимания различных значений размера шрифтов.)

1 голос
/ 07 июня 2011

Я полагаю, вы неправильно понимаете параметр actualFontSize.Это только выходной параметр, а не входной параметр.Неважно, какое значение вы предоставляете для actualFontSize;если указатель не равен NULL, он будет перезаписан размером шрифта, использованным при определении возвращаемого размера.Возвращенный фактический размер шрифта будет между minFontSize: и размером UIFont экземпляра, предоставленного в качестве аргумента для части sizeWithFont: селектора.

Вы также должны обязательно отправить это сообщениена строку, которую вы намереваетесь визуализировать.Вы всегда получите одно и то же значение, например, если вы спросите фиктивную строку, длина которой меньше строки, сколько высоты потребуется для указанной ширины.

Если вы обновите свой вопрос с помощью фактического кодаПри вызове метода каждый сможет помочь вам.

...