2012-03-16 5 views
6

私のiPhoneアプリでは、すべてのUILabelsのカスタムフォントを設定しました(正確には、UILabelをサブクラス化してメソッドをオーバーライドし、そのメソッドでカスタムフォントを設定し、そのカスタムクラス)。問題は今、すべてのテキストが予想されるベースラインよりもはるかに下にレンダリングされるため、 'y'や 'g'のような文字は下に切り捨てられます。カスタムフォントのUILabelが間違ってレンダリングされた

UIButton custom font vertical alignment

Custom installed font not displayed correctly in UILabel

私は、これらのソリューションで説明したように(それが最初に990に設定された)アセンダと周りいじるみました:私はここで同様の問題について読みました。それを約500に設定すると良い結果が得られましたが、それ以後、複数行テキストの行が混ざり合っていることに気付きましたが、これは当然受け入れられません。 UITextViewsでは、初期のベースラインでフォントがうまく表示されるようです。

この問題を解決する実際の方法はありますか?もちろん、複数行か1行のテキストのために異なるアセンダでいくつかのフォントを保持することができますが、それはむしろ面倒な解決策です。

PS:フォントはotf形式で提供されますが、ttf 、同じ結果につながる。

答えて

6

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

- (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

...しかし0.25以外の異なる値を試してみる必要がある場合があります。 - (void)drawTextInRect :(CGRect)rect { CGFloat pointSize = self.font.pointSize; CGRect newRect = CGRectMake(rect.origin.x、rect.origin.y +(0.2 * pointSize)、rect.size.width、rect.size.height); [super drawTextInRect:newRect]; } – kgibbon

関連する問題