iOSのAutoLayoutのON/OFFを使い分けたい件
iOS6から導入されたというこのAuto Layout. ユニバーサルアプリを作る場合にframeをチマチマいじって(別にそんなに大変でもないと思うけど) 調整しなくても良いというメリットがあるようだ。
具体的には親のViewからどれだけのマージンを取るかを上下左右(左右と上と下のどちらか)設定すればよい。例えば親のUIViewに対して左右の横のマージンを10ずつとると、親のViewから20のマージンを抜いたサイズに自動調整してくれる。
ただ、固定サイズのViewをグリッド形式で配置する場合は、滅茶苦茶めんどい。要は電話のキーパッドのようなUIを作る場合が相当辛かった。思いついただけでも、これだけの制約が必要になってしまった。
- widthとheightをequalにする制約
- 各々のマージンをゼロにする制約
- キーパッドの一番上の段に上の要素とのマージン制約
- キーパッドの一番下の段に下の要素とのマージン制約
frameでやる分にはCGRectSizeで与える値を相対的に与える必要があるけれど(iPhoneとiPadでは座標の位置が違うから)、固定サイズのViewを並べるだけならコードで配置したほうが絶対楽よね。
ただ、1つ問題がある。このキーパッドを作るViewはある要素の相対配置に置く必要があるので、そこはAutoLayoutを使いたい。が、その中に配置する子ViewはAutoLayoutを切って相対的に配置したい。AutoLayoutはframeでのサイズ設定ができないので、frameを使って配置するならAutoLayoutを切らないといけない。親はAutoLayoutで配置、子供はAutoLayoutを使わずに配置。
これが出来れば、だいたいのことは出来る。