標準の UILabel を使用して、垂直方向のスペースを埋めるようにフォント サイズを大きくしたいと考えています。この質問に対する受け入れられた回答からインスピレーションを得て、この drawRect 実装で UILabel のサブクラスを定義しました。
- (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 (wxh) のラベル、フォントとして Helvetica、ラベルに快適に収まる 60 の開始点サイズから始めました。標準 UILabel と文字列 "{Hg" を使用したサブクラスからの出力例を次に示します。
私はフォントのディセンダーとアセンダーを調べ、これらを考慮してさまざまな組み合わせでスケーリングを試みましたが、まだ運がありませんでした。これは、さまざまなディセンダーとアセンダーの長さを持つさまざまなフォントと関係がありますか?