[Swift3]内容に応じてUILabelの枠の大きさを調節する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

コード上でUILabelの表示を行おうとすると、枠のサイズがうまく設定できないことが多い。具体的には余計なサイズを確保してしまったり、文字数やフォントサイズが変わって文字が切れてしまったり。

本記事ではsizeToFitメソッドを利用してラベルの大きさを自動調整する方法を紹介する。

想定するケース

ストーリーボード上でUILabelを配置した場合は自動的に枠の大きさを調節してくれるのだが、コード上で配置した場合は枠の自動調節が行われない。

以下のようなコードの場合、文字数が増えた場合に全ての文字が表示されなくなる。また、文字が全て表示されていても縦横の枠の大きさが余分に見えてしまう。

実行するとこのような感じ。

textLabelのadjustsFontSizeToFitWidthプロパティにtrueをセットする手もあるが、これだと文字は潰れるし余計な空白は残るしで解決にならない。

sizeToFitでリサイズする

テキストの内容(文字数、フォントサイズ)が確定した後にsizeToFitメソッドを実行すると、テキストの内容に合わせて枠の大きさを自動調節してくれる。

調節は、ラベルの原点(左上角)の位置はそのままに、幅と高さを変えることで行われる。そのため、制約の設定などを行なっていない場合はsizeToFit実行後に位置の調節を行う必要がある。

実行するとこうなる。

「g」とか「y」の下の方が切れているのは気になるが…

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。