画像とラベルを縦に並べるUIButtonのカスタムクラス

はじめに

たまに必要になるので、こんな感じに画像とラベルを縦に並べるUIButtonのカスタムクラスを作りました。

f:id:y_sumida:20180122225341p:plain

contentEdgeInsetsとか毎回調整するのめんどくさいですよね。

探せばライブラリとかもあるとは思うけど勉強も兼ねて車輪の再発明です。

コード

github.com

画像とラベルのサイズに合わせて、縦に並べてセンタリングします。

Storyboardからもコードからも使えるようになってます。

コードからは上下と左右のマージンが指定できます。

不具合

  • width指定、leadingEdge/trailingEdge指定などで、必要な幅より狭い幅の場合に表示が崩れる。
    • いろいろ試したけど、今のところうまくいってない。
    • drawに入ってきた時点でラベルの後ろが切れてたりするので。

感想など

  • もうちょっとスマートに書きたかった。
  • contentEdgeInsetsとかの親クラスの変数を変更不可にするのに手間取った。
  • UIButtonに縦並びとかアイコンとラベル入れ替えるオプション欲しい。

参考

UIViewのライフサイクルについて、以下の記事が大変参考になりました。

developers.eure.jp