2

/の適応サイズを持つようにプロパティをSizeToFit指定する必要がないため、使用しています。私の場合、それはツールバーのボタンです。今、私は次の観察をしました:FrameUIButtonUILabel

AdjustsFontSizeToFitWidthと一緒に使用するとSizeToFit、フォントサイズが適応されなくなります。だから私はできる

  1. a を指定しFrameて使用するAdjustsFontSizeToFitWidth
  2. 使用SizeToFitしますが、調整可能なフォント サイズはもうありません

あなたもこの問題を抱えていますか?この問題をどのように回避しますか? 固有のコンテンツ サイズでフレーム サイズを制御するにはどうすればよいですか? または、Frameプロパティを設定する必要がありますか? Autolayout の利点は、フレームのサイズを定義しなくて済むことでした ...

4

2 に答える 2

3

理屈を間違えたと思います。SizeToFitコンテンツの後にサイズを定義します (コンテンツは既に固定サイズです)。AdjustsFontSizeToFitWidthフォントサイズを変更できるフレームが必要です。両方一緒ではうまくいきません。

于 2014-09-24T14:54:07.053 に答える
0

この問題に対処するために作成したマクロを次に示します。これにより、フォント サイズを幅に合わせて縮小し、縮小後にフォント サイズが元に戻らずに sizeToFit を呼び出すことができます。

///Works like `adjustsFontSizeToFitWidth` but allows you to use `sizeToFit` and/or measure the new [adjusted] font size; one time adjustment, needs to be called again if `.text` changes.
#define shrinkFontSizeIfNeeded(__label) {\
UIFont *__currentFont = __label.font;\
CGFloat __originalFontSize = __currentFont.pointSize;\
CGSize __currentSize = [__label.text sizeWithAttributes:@{NSFontAttributeName : __currentFont}];\
while (__currentSize.width > __label.frame.size.width && __currentFont.pointSize > (__originalFontSize * __label.minimumScaleFactor)) {\
    __currentFont = [__currentFont fontWithSize:__currentFont.pointSize - 1];\
    __currentSize = [__label.text sizeWithAttributes:@{NSFontAttributeName : __currentFont}];\
}\
__label.font = __currentFont;\
}
于 2018-07-23T06:52:44.623 に答える