Should…no, Must use Autolayout.

唐突だけど(そうでもない)

手動でviewのサイズ(frame)を計算するのではなく、

Autolayoutを使った方がやっぱり良い(というか使うべき)と思った。


ViewControllerのコンテナを使っていると、viewを重ねる際にその位置やサイズを

調整してやる必要がある。

親のviewに対して、子のviewをどれくらいの大きさでどこに配置するのか決める際だとか。

 

その時、viewDidLoad: でロードされたviewのサイズが実際に

画面に表示されるサイズと異なっていたりする。

 

例えば、InterfaceBuilderでコンテナviewを使って親子構造を作った場合(こんな感じ)、

 

 

子側(右)のViewControllerの viewDidLoad: の時点では、viewのサイズが親のviewであるコンテナview(左のContainer)のサイズにはなっていない。

よって、このタイミングで子viewの上にのるラベルなどのコンポーネントの位置などを手動で調整すると壮大にずれてしまう。


では、いつそのサイズが確定するかというと、viewWillLayoutSubviews: の模様。

ただし、viewWilllLayoutSubviews: が呼ばれるのは1度ではないので

その都度、調整する処理が実行されるのは無断なような気もしないではない。

だったら、viewDidLoad: でAutolayoutを設定してしまえば1回で済むし早くて楽じゃないの、という帰結。

 

アップルがAutolayoutを導入した経緯もそんなところにあるような気がしたり、しなかったり。


os7のリリースも近づいてるし、そろそろos5を捨ててos6以降に対応ということにすれば、Autolayoutも使えていろいろ良いことずくめ。マップもだいぶマシにはなったし。

もちろん、os7にだけ対応というのが

一番楽でもっとも望ましいのは間違いないけれど(プログラマ的に)。

 

つまり、何が言いたいかと言うと
 
 みんな、さっさとosを乗り換えよう!

 

なにしろタダだしね!(デバイスが対応している限りは)。