Я хочу взять стандартную UILabel и увеличить размер шрифта, чтобы он заполнил вертикальное пространство. Воспользовавшись принятым ответом на этот question, я определил подкласс в UILabel с этой реализацией drawRect:
- (void)drawRect:(CGRect)rect
{
// Size required to render string
CGSize size = [self.text sizeWithFont:self.font];
// For current font point size, calculate points per pixel
float pointsPerPixel = size.height / self.font.pointSize;
// Scale up point size for the height of the label
float desiredPointSize = rect.size.height * pointsPerPixel;
// Create and assign new UIFont with desired point Size
UIFont *newFont = [UIFont fontWithName:self.font.fontName size:desiredPointSize];
self.font = newFont;
// Call super
[super drawRect:rect];
}
Но это не работает, поскольку он масштабирует шрифт за пределами нижней метки. Если вы хотите воспроизвести это, я начал с метки 289x122 (w x h), Helvetica в качестве шрифта и начальной точки. Размер 60, который удобно помещается на этикетке. Вот пример вывода из стандартного UILabel и моего подкласса с использованием строки "{Hg":
Я посмотрел на шрифты descenders и ascenders, попробовал масштабирование, принимая их во внимание в разных комбинациях, но до сих пор не повезло. Любые идеи, это что-то общее с разными шрифтами, имеющими различную длину спуска и восхождения?