0

そう、

ではsizeWithFont:minFontSize:actualFontSize、ラベル内のフォントを縮小するために使用できる actualFontSize のポインターを渡します。のように:

[s sizeWithFont:self.font
                minFontSize:minimumScaleFactor
                actualFontSize:&actualFontSize
                    forWidth:width
                lineBreakMode:lineBreakMode];

これでself.frame.font.pointSize = actualSize、フォントサイズを変更できます。私の質問は次のとおりです。 sizeWithFont が非推奨になったので、このポインターを元に戻すにはどうすればよいですか?

基本的に、推奨される交換方法は次のboundingRectWithSizeとおりです。

[s boundingRectWithSize:CGSize(width,CGFLOAT_MAX)
                options:(NSStringDrawingUsesLineFragmentOrigin)
                attributes://An NSDictionary with font
                context:nil];

しかし、ご覧のとおり、サイズのみを返します。私は次のようなことを考えました:

changeInFontSize = (newSize.height - oldSize.height) + (newSize.width - oldSize.width)
                   -------------------------------------------------------------------
                                                  2

しかし、これは私が望む答えを本当に与えてくれません。誰かがこれを行う方法について私を助けてくれますか? 正確には、現在のフォント サイズを変更するには、フォント サイズの違いが必要です。

4

1 に答える 1

1

問題は、sizeWithFontメソッドが必要に応じてフォントサイズを縮小することです。では、関数がより小さいフォント サイズを使用した場合、どのサイズが使用されたかをどのように知るのでしょうか? それがそのactualFontSizeためです!ドキュメントから:

このメソッドは改行が発生する場所を計算しますが、実際にはテキストを追加の行に折り返すわけではありません。文字列全体が初期フォント サイズを使用して指定された幅に収まらない場合、このメソッドは、文字列が収まるまで、または指定された最小フォント サイズに達するまで、フォント サイズを縮小します。

新しい推奨方法boundingRectWithSizeでは、フォントサイズは縮小されません。したがって、関数が fonsize を縮小しない場合、つまり で指定したサイズを使用する場合attributes、実際に使用されたサイズを返す必要はありません (指定したサイズとまったく同じであるため、既にわかっているため)。

編集:
定義済みの境界ボックスに収まるように必要なフォント サイズを計算する場合は、いくつかのポイント サイズでテストし、最適なサイズを計算する必要があります。いくつかの例については、このリンクを確認してください(リンクの最後の回答は、効率を最適化するために興味深いようです)

于 2014-03-03T21:18:57.617 に答える