Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

iOSのAutoLayoutのON/OFFを使い分けたい件

iOS6から導入されたというこのAuto Layout. ユニバーサルアプリを作る場合にframeをチマチマいじって(別にそんなに大変でもないと思うけど) 調整しなくても良いというメリットがあるようだ。

具体的には親のViewからどれだけのマージンを取るかを上下左右(左右と上と下のどちらか)設定すればよい。例えば親のUIViewに対して左右の横のマージンを10ずつとると、親のViewから20のマージンを抜いたサイズに自動調整してくれる。

ただ、固定サイズのViewをグリッド形式で配置する場合は、滅茶苦茶めんどい。要は電話のキーパッドのようなUIを作る場合が相当辛かった。思いついただけでも、これだけの制約が必要になってしまった。

  • widthとheightをequalにする制約
  • 各々のマージンをゼロにする制約
  • キーパッドの一番上の段に上の要素とのマージン制約
  • キーパッドの一番下の段に下の要素とのマージン制約

frameでやる分にはCGRectSizeで与える値を相対的に与える必要があるけれど(iPhoneiPadでは座標の位置が違うから)、固定サイズのViewを並べるだけならコードで配置したほうが絶対楽よね。

ただ、1つ問題がある。このキーパッドを作るViewはある要素の相対配置に置く必要があるので、そこはAutoLayoutを使いたい。が、その中に配置する子ViewはAutoLayoutを切って相対的に配置したい。AutoLayoutはframeでのサイズ設定ができないので、frameを使って配置するならAutoLayoutを切らないといけない。親はAutoLayoutで配置、子供はAutoLayoutを使わずに配置。

これが出来れば、だいたいのことは出来る。

iOSアプリ開発2日目(初日はSwiftで遊んでた)の進捗でした。