web-dev-qa-db-ja.com

iOSの自動レイアウトでフォントサイズを動的に変更する方法は?

テキストをUILabelに収めたいのですが、自動レイアウトを使用しているため、iPhoneによってはUILabelのサイズが変化しますが、フォントサイズを修正できないため、テキストが切り取られています。

テキストがUILabelに動的に収まるように制約を設定する方法はありますか?

画面解像度が異なるため、テキストが切り取られたのを参照

28

autoshrinkを使用する必要があります。

すべてのiPhoneは同じCompact widthサイズクラスをポートレートモードで使用する場合、これに依存してラベルサイズを処理することはできません。


プレビューは、iPhone5、iPhone6、iPhone 6+用です

enter image description here

インスペクタで、自動縮小の前に最小フォントスケールまたは最小フォントサイズを選択する必要があります。これにより、コンテンツはフォントのサイズをラベルに合わせて変更できます。

ここでは、最小フォントスケールを0.5に設定しているため、最小サイズは現在のサイズの半分(31.0)です。テキストは、最小のスケール/サイズに達するまで収まります。

(通常、この目的で「文字間隔を狭くする」を使用しないでください。文字間隔を狭くすると、同じフォントサイズが使用され、文字間の間隔が狭くなります。サイズが有効になっています。)


iPad Proなどのワイドスクリーンデバイス、およびiPhone 4S。さまざまなユーザーシステムフォントサイズでテストすることをお勧めします。Settings> General> Accessibility> Larger Text

自動縮小では、ラベルに設定されているフォントサイズよりも大きいフォントサイズは調整されません。つまり、ラベルを画面と同じ幅にし、フォントサイズを14のままにすると、そのサイズに達するまでフォントサイズを増加しようとします。

実際に機能させるには、bigフォントサイズを選択します。

自動シュリンクをサイズクラスと組み合わせて、デバイス/向きに応じて最大フォントサイズを変更できます。


UIButtonsでautoshrinkを使用する場合、2行のコードでこの動作を設定できます。

myButton.titleLabel.minimumScaleFactor = 0.5;
myButton.titleLabel.adjustsFontSizeToFitWidth = YES;
59
Crazyrems

こんにちは、ストーリーボードからUILabelを追加する場合、使用可能なすべてのレイアウトに異なるフォントを設定できます。

enter image description here

7

サイズクラスを使用してこれを行うことができます。サイズクラスを使用する各ディスプレイディメンションの場合、これにより、通常の幅-通常の高さ、通常の幅-コンパクトの高さ、コンパクトな幅-通常の高さ、コンパクトな幅-コンパクトな高さの4つの抽象デバイスが得られます。次の表は、iOSデバイスとそれに対応するサイズクラスを示しています。  enter image description here

この特定のサイズクラスのフォントサイズを設定するには、最初にUILabelを選択します。 [属性]インスペクターの下で、フォントフィールドの横にプラス(+)ボタンが表示されます。 [+]ボタンをクリックし、[コンパクト幅]> [通常の高さ]を選択します(または要件に応じて幅と高さを選択します)。すると、特定のサイズクラス専用の[フォント]オプションの新しいエントリが表示されます。元の[フォント]オプションのサイズはそのままにしますが、wC hR(または選択に応じて)フォントフィールドのサイズを必要なポイント(たとえば14)に変更します。

enter image description here

6
Madan gupta