iOS自動佈局NSLayoutConstraint
iOS自動佈局NSLayoutConstraint
(1)自動佈局使用視覺化語言:VFL(Visual Format Language)
[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|[email protected][_view1(==_view2)]-space-[_view2(==_view1)]-40-|"
options:NSLayoutFormatDirectionLeftToRight
metrics:@{@"space":@20}
views: NSDictionaryOfVariableBindings(_view1,_view2)
];
引數解釋:
第一個引數:constraintsWithVisualFormat 使用VFL格式化的字串,可以參見官方的幫助文件;
第二個引數:options 指定VFL中所有物件的佈局屬性和方向。舉例:有2個檢視使用VFL進行佈局,可以使用NSLayoutFormatDirectionLeftToRight,表示從左到右佈局;
第三個引數:metrics 度量字典,例如Format字串中用到的space引數,這是我們在這個metrics裡面宣告space引數的key和數值;
第四個引數:views 指定約束的檢視:Format字串中用到了哪些view,就把這些view放到這個字典裡。
VFL語言的規則:
a) “H” :表示水平方向,裡面的view都是從左到右,或者從右到左排列,具體方向由options決定,預設從左到右
“V”:表示垂直方向,裡面的view都是從上到下,或者從下到上排列;具體方向由options決定,預設從上到下
b) “|” 表示父view的邊界;
c) “[]” 表示view,"()"表示尺寸,尺寸的型別由“H”和“V”決定,如果是“H”,則表示寬度,“V”表示高度,它們可以多個條件組合,中間使用逗號分隔,舉例:H:[view(>=10, <=20)],表示view的寬度大於等於10且小於等於20;
d) “-” 表示間隙,表示相對父view,獲取相鄰兩個view之間的距離,例如"H:|-10-[view]-10-|"表示子view左右兩邊距離父view距離都是10.
e) "@"表示優先順序,就是自動佈局時的優先順序。舉例:V:|[email protected][view(55)]
(2)NSLayoutConstraint佈局
[NSLayoutConstraint constraintWithItem:(id)item
attribute:(NSLayoutAttribute)attribute
relatedBy:(NSLayoutRelation)relation
toItem:(id)otherItem
attribute:(NSLayoutAttribute)otherAttribute
multiplier:(CGFloat)multiplier
constant:(CGFloat)constant]
1.引數說明:
第一個引數:指定約束左邊的檢視view1,將要約束view,參照物是view2
第二個引數:指定view1的屬性attr1,比如約束寬,高,上下邊距,左右邊距之類的
第三個引數:指定左右兩邊的檢視的關係relation,大於等於,小於等於,或等於
第四個引數:指定約束右邊的檢視view2 這個view就是參照物
第五個引數:指定view2的屬性attr2 比如約束寬,高,上下邊距,左右邊距之類的
第六個引數:指定一個與view2屬性相乘的乘數multiplier 比例係數多少倍,比如view1寬是view2的10倍,就填10
第七個引數:指定一個與view2屬性相加的浮點數constant 偏移量,比如view1寬是view2的10倍還多20,這個就填20
依據的公式是:view1.attr1 = view2.attr2*multiplier +constant