第一種:
(NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views; ### 參數定義: 第一個參數:V:|-(>=XXX) :表示垂直方向上相對於SuperView大於、等於、小於某個距離 如果要定義水平方向,則將V:改爲H:便可 在接着後面-[]中括號裏面對當前的View/控件 的高度/寬度進行設定; 第二個參數:options:字典類型的值;這裏的值通常在系統定義的一個enum裏面選取 第三個參數:metrics:nil;通常爲nil ,參數類型爲NSDictionary,從外部傳入 //衡量標準 第四個參數:views:就是上面所加入到NSDictionary中的綁定的View ### 使用規則: |: 表示父視圖 -:表示距離 V: :表示垂直 H: :表示水平 >= :表示視圖間距、寬度和高度必須大於或等於某個值 <= :表示視圖間距、寬度和高度必須小宇或等於某個值 == :表示視圖間距、寬度或者高度必須等於某個值 @ :>=、<=、== 限制 最大爲 1000 |-[view]-|: 視圖處在父視圖的左右邊緣內 |-[view] : 視圖處在父視圖的左邊緣 |[view] : 視圖和父視圖左邊對齊 -[view]- : 設置視圖的寬度高度 |-30.0-[view]-30.0-|: 表示離父視圖 左右間距 30 [view(200.0)] : 表示視圖寬度爲 200.0 |-[view(view1)]-[view1]-| :表示視圖寬度同樣,而且在父視圖左右邊緣內 V:|-[view(50.0)] : 視圖高度爲 50 V:|-(==padding)-[imageView]->=0-[button]-(==padding)-| : 表示離父視圖的距離 爲Padding,這兩個視圖間距必須大於或等於0而且距離底部父視圖爲 padding。 [wideView(>=60@700)] :視圖的寬度爲至少爲60 不能超過 700 若是沒有聲明方向默認爲 水平 V:
/*html
* 1. 自動佈局使用可視化語言:VFL(Visual Format Language)編程
2. 自動佈局的相關參數ide
NSArray *constrArray = [NSLayoutConstraint constraintsWithVisualFormat:@"string類型"函數
options:佈局
metrics:spa
views:];3d
3. 解釋:code
a) 第一個參數:使用VFL格式化的字符串,能夠參見官方的幫助文檔;orm
b) 第二個參數:指定VFL中全部對象的佈局屬性和方向。舉例:有2個視圖使用VFL進行佈局,可使用NSLayoutFormatAlignAllLeft,就讓兩個視圖左對齊;htm
c) 第三個參數:度量或者指標的字典,字典裏面有相關的鍵值對來控制相關的度量指標,經過key獲取;
d) 第四個參數:指定約束的視圖:一個或多個。
4. VFL語言的規則
a) "H" 表示水平方向,"V"表示垂直方向;
b) "|" 表示superview的邊界;
c) "[]" 表示view,"()"表示尺寸,它們能夠多個條件組合,中間使用逗號分隔,舉例:[view(>=70, <=100)];
d) "-" 表示間隙;
e) "@"表示優先級。舉例:V:|-50@750-[view(55)]
*/
/**
//建立VFL約束字符串
NSString *hVFL = @"H:|-space-[leftView(==rightView)]-space1-[rightView]-space-|";
NSString *hVFL1 = @"H:|-space-[bottomView]-space-|";
NSString *vVFL = @"V:|-space-[leftView(==bottomView)]-space-[bottomView]-space-|";
NSString *vVFL1 = @"V:|-space-[rightView(==bottomView)]-space-[bottomView]-space-|";
//建立鍵值映射
NSDictionary *metircs = @{@"space":@20,@"space1":@30};
NSDictionary *views = NSDictionaryOfVariableBindings(leftView,rightView,bottomView);
//建立約束
NSArray *hconstraint = [NSLayoutConstraint constraintsWithVisualFormat:hVFL options:NSLayoutFormatDirectionLeadingToTrailing metrics:metircs views:views];
NSArray *hconstraint1 = [NSLayoutConstraint constraintsWithVisualFormat:hVFL1 options:NSLayoutFormatDirectionLeadingToTrailing metrics:metircs views:views];
NSArray *vconstraint = [NSLayoutConstraint constraintsWithVisualFormat:vVFL options:NSLayoutFormatDirectionLeadingToTrailing metrics:metircs views:views];
NSArray *vconstraint1 = [NSLayoutConstraint constraintsWithVisualFormat:vVFL1 options:NSLayoutFormatDirectionLeadingToTrailing metrics:metircs views:views];
//添加約束
[self.view addConstraints:hconstraint];
[self.view addConstraints:hconstraint1];
[self.view addConstraints:vconstraint];
[self.view addConstraints:vconstraint1];
**/
}
總結:經過一個小小的編程,使你們初步瞭解了NSLayoutConstraint的使用規則和做用。這兩種方式各有特色,本人比較喜歡用第二種,由於感受代碼較少。在使用NSLayoutConstraint 系統自動佈局時,注意的地方不少,細心一點,用起來仍是很方便的
第二種
-------------------------分割線-----------------------
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c; ### 參數說明: 第一個參數:指定約束左邊的視圖view1 第二個參數:指定view1的屬性attr1,具體屬性見文末。 第三個參數:指定左右兩邊的視圖的關係relation,具體關係見文末。 第四個參數:指定約束右邊的視圖view2 第五個參數:指定view2的屬性attr2,具體屬性見文末。 第六個參數:指定一個與view2屬性相乘的乘數multiplier 第七個參數:指定一個與view2屬性相加的浮點數constant 這個函數的對照公式爲: view1.attr1 <relation> view2.attr2 * multiplier + constant
第三種:Masonry 轉載:http://www.jianshu.com/p/bab69690cb1a http://www.jianshu.com/p/5da3d2fe5dee http://www.cnblogs.com/xieyajie/p/4612697.html