2012-02-03 4 views
5

私はこれに似たスレッドがたくさんあることを知っていますが、私はそれらのすべてを読んだことがあります。テキストをUILabelに垂直にフィットさせますか?

私はすべてのテキストをVERTICALLYというラベルに表示しようとしています。

私に説明しましょう - フォントは常に同じように作成されるわけではないので、フォントの高さは同じでもかまいません(たとえば24pts)。ただし、AscenderとDescenderは大きく異なります。一方のフォントはベースラインを上回り、もう一方のフォントは主にベースラインを上回ります。そのため、同じテキストが異なるフォントで表示されている場合があります。

たとえば、下記のスクリーンショットをご覧ください。

最初はHelvetica-Bold 300ptsです。 2番目はApple Gothic 300ptsです。

"g"の一番下がHelvetica(と他の多くのフォントも同様です。試してみてください)にどのように表示されているのでしょうか。

Helvetica-Bold300

AppleGothic

だから私の問題はこれです:私は関係なく、フォントの、テキスト全体を見ることができるようにしたいと思います。 "Helvetica"の例のテキストをラベル内で上に移動してラベル内で中央に移動すると、問題が解決します。簡単にするために、私はただ一つの行を表示する必要があります。

残念ながら、私が見てきたソリューションのどれも、フォントの下降者と上手を伴わず、Rect内にテキストを描画する方法を理解していません。さまざまなスレッドの "VerticalAlignment"ソリューションは、この特定の問題を解決しないことに注意してください。

誰にでもこれに関するアイデアや解決策はありますか?

答えて

2

最も簡単な方法は、UILabelをサブクラス化し、NSString UIKit additionsにあるNSStringの- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakModeメソッドを使用することです。

サブクラスで- (void)setFontを無効にして、フォントのサイズがビューの四角形で機能するかどうかをテストし、サイズが大きすぎる場合は小さくすることができます。

+0

ありがとうございます。私が投稿した画像は、既にVerticalAlignmentと 'sizetofit'を使ってサブクラス化した結果です。フォントサイズは問題ではありません - あなたが見ることができるように、テキストのための十分な余地があります - それはちょうど正しく整列していません。 – wayneh

+0

しかし、文字列の高さを与えるsizeWithFontメソッドを見てください。それを知っていれば、それを自分の中心に置き、drawStringAtPointで文字列を描くことができます。リンクをたどるだけで、これを達成するために必要なすべてが提供されます。 – sosborn

+0

OK、私はそれをチェックし、私ができることを見てみましょう。 – wayneh

関連する問題