1. 程式人生 > 其它 >iOS自動佈局NSLayoutConstraint

iOS自動佈局NSLayoutConstraint

技術標籤:iOS技術彙總ios

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