2013 5月19日 12:04
AutoLayout になかなか慣れません。 そうは言っても使わなければ、身につかない。 というか久しぶにりiOSのコード書いてるだけな気がする 今回挑戦したのはふたつのViewの間に固定幅をスペースをつくりたい。 具体的には以下の感じ。 書いた VisualFormatLanguage はこんな感じ。 |-[_leftView]-40-[_rightView]-| [_leftView(==_rightView)] V:|-[_leftView]-| V:|-[_rightView]-| 以下のように書いてもよい。 |-[_leftView(==_rightView)]-40-[_rightView]-| V:|-[_leftView]-| V:|-[_rightView]-| やってみると簡単。 プログラムで気軽にレイアウトできる。 具体的なソースコードは Github に アップしています。 主な処理はこの辺にあります。 簡単に解説 頭に V: がついているのは 縦方向に対する設定です。 |- の部分は OS 標準の幅になります。ぴったりつけたいなら、|-0- とします。 縦方向の左側 だけやってみます。 V:|-0-[_leftView]-0-| まとめ なれるまで発想のセンスがいる気がします。 論理的な手順で、作りたいレイアウトをするのはまだまだまだ説明できそうにないです。
2013 1月13日 01:17
今後のiOSアプリケーションのために Auto Layout を学んだ - 準備編 につづき勉強した内容をまとめていきたいと思います。 まずは Auto Layoutについて。概ね WWDC 2012 の session 202 のまとめだったり、使ってみた感じでのまとめです。仮説もいっぱい混ざってるので注意してください。 Auto Layout は制約ベースのレイアウトシステム Auto Layout は ふたつのViewの関係を設定していくことでレイアウトを構築します。 例えば ある特定のViewは親のView左から 自分の左端を 20pt あける のような制約をつくります。これらの制約を追加していくことで期待するレイアウトを構築します。 制約が無い場合はそれぞれデフォルトの振舞いがあります。 動きをみつつ上書きしていくような形になります。 制約のでViewのサイズなのが自動的に決定していくのでコードで記述する場合は frame の設定が不要になる書き方ができます。 Auto Resizing Maskの機能を再現することもできる Auto Layout は 以前のレイアウトシステム(?)である Auto Resizing Mask の表現範囲より大きなもので、エミュレートすることができます。Auto Resizing Mask でできることはすべてできますし、コードから利用する場合は今までどおりの挙動をします。 また、デフォルトでは Auto Resizing Mask をエミュレートしています。エミュレートさせたくない場合は translatesAutoresizingMaskIntoConstraints プロパティを NO に設定します。 作成できる制約 制約はふたつのviewに対して item1.attribute1 = multiplier x item2.attribute2 + constant という式を満たすように attribute1 を設定するようです。(たぶん) 等号の部分は不等号を指定することができます。制約はNSLayoutConstraint