Почему UIFont sizeWithFont учитывает пустое пространство в расчете? - PullRequest
6 голосов
/ 13 сентября 2011

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

Когда я использую boldSystemFontOfSize , текст выравнивается по центру по вертикали (, что я и хочу ), но когда я использую fontWithName , я получаю отступ под текст. Любая причина, почему sizeWithFont добавляет в дополнение?

enter image description here

Вот мой код ...

CGRect frameLabel = label.frame;
CGSize sizeLabel = [label.text sizeWithFont:label.font];
frameLabel.size.width = sizeLabel.width;
frameLabel.size.height = sizeLabel.height;
[label setBackgroundColor:[UIColor redColor]];

** Редактировать **

Я могу рассчитать верхний и нижний отступы, используя этот код, и отрегулировать метки frame.origin.y для вертикального центрирования моей метки там, где она должна быть

float topPadding = [label.font ascender] - [label.font capHeight];
float bottomPadding = [label.font lineHeight] - [label.font ascender];

1 Ответ

3 голосов
/ 13 сентября 2011

Шрифт является единственно возможной причиной этого заполнения, но если вам нужны только однострочные метки, не тратьте время на редактирование шрифта, просто уменьшите высоту метки на несколько пикселей после установки правильного кадра, выполнив что-то как это:

label.frame = CGRectInset(label.frame, 0, bottomPadding);

Также вместо:

CGRect frameLabel = label.frame;
CGSize sizeLabel = [label.text sizeWithFont:label.font];
frameLabel.size.width = sizeLabel.width;
frameLabel.size.height = sizeLabel.height;

Вы можете просто позвонить:

[label sizeToFit];
...