typedef NS_ENUM(NSInteger, NSLayoutAttribute) { NSLayoutAttrubuteLeft, SLayoutAttrubuteRight, SLayoutAttrubuteTop, SLayoutAttrubuteButtom, SLayoutAttrubuteLeading, SLayoutAttrubuteTrailing, SLayoutAttrubuteWidth, SLayoutAttrubuteHeight, SLayoutAttrubuteCenterX, SLayoutAttrubuteCenterY, SLayoutAttrubuteBaseline,
SLayoutAttrubuteNotAnAttribute = 0
};
..制約の計算式と計算結果の関係性を表す列挙型。typedef NS_ENUM(NSinteger, NSLayoutRelation) { NSLayoutRelationLessThanOrEqual = -1, NSLayoutRelationEqual = 0, NSLayoutRelationGreaterThanOrEaqual = 1, };
..競合する制約間の優先順位を表す列挙型。 値が高い方が優先順位が高い。enum { UILayoutPriorityRequired = 1000, UILayoutPriorityDefaultHigh = 750, UILayoutPriorityDefaultLow = 250, UILayoutPriorityFittingSizeLevel = 50 }; typedef float UILayoutPriority;
<NSLAuoytConstraintの計算式> 属性値1 == 属性値2*乗数 + 定数
button2.left == button1.right*1 + 10 ..ボタン1の右端から右に10pxの位置にボタン2を設置
view2.width == view1.width*3 + 0 ..view2の幅をview1の幅の3倍に設定
..制約をNSStringで表す。 self.view.addConstraintsWithFormat("H:|-15-[v0]-10-[v1(135)]-15-|", views: loginBtn, twitterBtn) self.view.addConstraintsWithFormat("V:[v0(40)]-15-|", views: loginBtn) self.view.addConstraintsWithFormat("V:[v0(40)]-15-|", views: twitterBtn) H:horizon V:Vertical |:親viewの端 [v0]:制約を設定するviewのインスタンス [v1(10)]:2つめに渡されたviewの幅もしくは高さを10pxに設定 ..viewのframeが変化した際に自動的に呼ばれる。 似たものにupdateConstraintsがあるが、 こちらもシステムによって自動的に呼ばれるので 呼び出す処理の作成は不要。 layoutSubviewsとupdateConstraints両方をオーバーライドしてはいけない。layoutSubviews <--- setNeedsLayout uodateConstraints <--- setNeedsUpdateConstraints
<注意> iOS5ではコードによるAutoLayoutは実現できない。
<参考> クラスメソッド かけがわ様 http://www.slideshare.net/classmethod/i-os-auto-layout