6

私の iPhone アプリでは、すべての UILabels にカスタム フォントを設定しました (より正確には、UILabel をサブクラス化し、メソッドをオーバーライドし、そのメソッドでカスタム フォントを設定し、IB のすべてのラベルをそのカスタム クラスに設定しました)。ここでの問題は、すべてのテキストが予想されるベースラインよりもはるかに下にレンダリングされるため、「y」や「g」などの文字が下で途切れることです。ここで同様の問題について読みました:

UIButton カスタム フォントの垂直方向の配置

カスタム インストールされたフォントが UILabel に正しく表示されない

次に、これらのソリューションで説明されているように、アセンダーをいじってみました (最初は 990 に設定されていました)。約 500 に設定すると良い結果が得られましたが、その後すぐに、複数行のテキストの行が互いに混ざり合っていることに気付きました。これはもちろん受け入れられません。ただし、UITextViews では、フォントは最初のベースラインで正常にレンダリングされるようです。

この問題を解決する実用的な方法はありますか? もちろん、複数行テキストまたは単一行テキスト用に異なるアセンダーを持つ複数のフォントを保持することもできますが、それはかなり厄介な解決策です..

PS: フォントは otf 形式で提供されていますが、ttf に変換してみましたが、同じ結果になりました。

4

1 に答える 1

6

わかりました、誰かが興味を持っている場合に備えて、私はうまくいくはずの回避策を見つけました。drawTextInRectのメソッドをオーバーライドしUILabel、指定された四角形を変更して、それをスーパークラス メソッドに渡すだけです。

- (void)drawTextInRect:(CGRect)rect {
    CGFloat pointSize = self.font.pointSize;

    CGRect newRect = CGRectMake(rect.origin.x, rect.origin.y - (0.25 * pointSize), rect.size.width, rect.size.height);

    [super drawTextInRect:newRect];
}

0.25 以外の値を試してみる必要があるかもしれませんが...

于 2012-03-19T10:32:47.577 に答える