前回の続き。7回にわたってAuto Layoutについて説明しました。実践でよく使いそうなものは、だいたい説明できたかなと思います。最後にAuto Layoutについてまとめたいと思います。

Auto LayoutはInterface Builderを使うことが前提

Interface Builder(以下IB)を嫌ってframe直接設定で配置してきた人も多いと思います。結局、IBとAutoresizingMaskではカバーできないケースも多かったですよね。特にUILabelの高さ可変とその下に連なるSubviewの配置とか・・・。IBとプログラムに配置処理が分離されるのを嫌ってIBを避けた人もいるでしょう。

Auto LayoutはIBを使うことを前提だと思ったほうが良いです。プログラムからもできるのですが(Visual Format Language)、frame設定より複雑です。また変数名を文字列として使うのでコードの保守性も低くなるように思います。

参考記事:プログラムによるAuto Layoutをおすすめしない理由

その代わりAuto LayoutはIB上だけで従来のAutoresizingMaskより多くのケースを対応できるようになっています。IBを避けてきた人も一度見なおしてみてはいかがでしょうか?

Auto Layoutはサイズが異なる端末に対応するためのもの?

iPhone 5、iOS 6とセットでAuto Layoutが導入され、サイズが異なる端末に対応するためにAuto Layoutが必要という認識があるようです。自分も最初はそう思ってましたが、従来のframeとAutoresizingMaskでも、きちんと書けば異なるサイズの対応もできます。Superviewのbounds内に収まるようにすればよいだけですから。

チュートリアル その5で述べたようにSubviewのサイズが可変して、それによって隣接するSubviewの位置やサイズが変わる、こういったことはAuto Layoutを使えばプログラムレスででき、作業時間を短縮できます。

Auto Layoutは、従来のSubview Layoutのプログラミングを楽にするためにあると捉えたほうが良いのではと思います。

Auto Layoutを絶対に使わなければいけない?

Auto Layoutを使うか否かはケースバイケースで判断するで良いと思います。

たとえば動的に複数のSubviewを配置せねばならず、処理が複雑な場合は、frameを直接設定したほうが確実で小回りが効く場合もあるでしょう。無理に頭をひねらせてAuto Layoutでやる必要はないと思います。従来のAutoresizingMaskでも言えることだと思います。

Auto LayoutをやるためにAuto Layoutがあるのではなく、プログラミングを楽にするためにある。そう捉えて臨機応変が良いのではないでしょうか?

まとめ

  • Auto Layoutを使えばプログラミングなしでSubview配置できるケースが増える
  • Interface Builderアンチの人もAuto Layoutとセットで使ってみよう
  • Auto Layoutを直接プログラミングで行うのは難しい・保守性が低い
  • 状況によってはAuto Layoutを使わずframe直接設定も考える余地あり