標準のUILabelを使用して、垂直方向のスペースを埋めるようにフォントサイズを増やしたいと考えています。このquestionのための受け入れ答えからインスピレーションを取って、私はこののdrawRect実装にUILabelのサブクラスを定義した: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(w x h)のラベル、Helveticaをフォントとして使用し、ラベルにうまく収まる60の開始点サイズで開始しました。
私は、フォントのディセンダとアセンダを見てきましたが、中にこれらを考慮しスケーリングを試してみました:ここに文字列「{水銀」を使用して標準UILabelと私のサブクラスからの出力例です異なる組み合わせが、まだ運がなかった。任意のアイデアは、これは、ディセンダとアセンダの長さが異なるフォントを使用することですか?
まあ...それは恥ずかしいほど単純な間違いだった。それを見つけていただきありがとうございます。 – user524261
私は 'layoutSubviews'でそれを実装しようとしましたが、うまくいくとは思いません。その理由は、 'UILabel'サブクラスに新しいフォントを割り当てると' layoutSubviews'が呼び出されてしまうという問題があると思います。私の実装では、私のアプリケーションの待ち行列の1つがロックアップされました。 – user444731