要始終牢記一點:所有的限制都是NSLayoutConstraint類的成員,無論你是以何種形式建立他們的。
下列代碼片段示範了使用可視化格式(VFL)建立限制。
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view1]-8-[view2]" options:NSLayoutFormatAlignAllLeading metrics:nil views:NSDictionaryOfVariableBindings(view1, view2)]];
或:
NSString *hvfl = @"H:|-20-[redView]-20-|";
NSDictionary *views = @{@"redView" : redView};//NSDictionary *views = NSDictionaryOfVariableBindings(redView);
NSDictionary *metrics = @{@"space" : @20};
NSArray *hlcs = [NSLayoutConstraint constraintsWithVisualFormat:hvfl options:kNilOptions metrics:metrics views:views];
[self.view addConstraints:hlcs];
Format:VFL語句。
options:對齊方式。通過給選項參數賦0值來忽略選項。
metrics:VFL語句中用到的變量值。
views:VFL語句中用到的控件。
注意:
1.字首指定(H:或V:),當忽略坐标時,限制預設為水準布局;
2.每個視圖的變量名出現在方括号中(例如[view1]);
3.字元串中視圖名稱的順序與布局中視圖的請求順序比對。這個順序一般是從頂到底或者從左到右;
變量綁定:
可以通過NSDictionaryOfVariableBindings( )來建立。他根據傳入的變量來建立一個字典,使用變量的名稱作為鍵,使用變量指向的對象作為值。
例如這個調用:
NSDictionaryOfVariableBindings(leftLabel, rightLabel);
就會建立下列這個字典:
@{@"leftLabel" : leftLabel, @"rightLabel" : rightLabel};
格式字元串結構:
用于建立限制的格式字元串要遵循一種如下指定的文法:
(<orientation>:)?(<superview><connection>)? <view>(<connection><view>) * (<connection><superview>)?
格式字元串部件:
可視化格式字元串:
1.水準或垂直放置:
H: 或 V:
例如:V:[view1]-15-[view2] 将view2放到其頂部距離view1底部15點的位置
2.視圖:
[item]
例如: [view1] 視圖綁定字典将方括号所包圍的名稱同一個視圖執行個體相比對
3.父視圖:
|
例如:H|[view1]| 使view1的寬度尺寸同父視圖的一緻
4.關系:
==
<=
>=
例如: H:[view1]-(>=20)-[view2]
使view2的前緣距離view1後至少20點
5.度量:
metric
例如::[view1(<=someWidth)] V:[view1]-mySpacing-[view2] 度量是鍵。someWidth和mySpacing必須在傳遞的度量字典中映射為NSNumber值
6.齊平對齊
[item][item]
例如:H:[view1][view2] 使view1的字尾同view2的前緣齊平
7.靈活間隔
[item]-(>=0)-[item]
例如:[view1]-(>=0)-[view2] 根據需要,視圖可以伸展分離開,“至少分離0點”
8.固定間隔
[item]-gap-[item]
例如:V:[item]-20-[item] 使view1的底部距離view2的頂部20點
9.固定距離(視圖到視圖)
[item]--[item]
例如:[item]-[item]在兩個視圖間留下一個小的固定空間(8點)
10.固定高度或寬度
[item(==size)]
[item(size)]
例如:[view1(50)] 使view1沿着某個坐标軸的範圍剛好50點
11.最大和最小寬度/高度
[item(>=size)]
[item(<=size)]
例如:[view1(>=50)][view1(>=50)] 限制view1在某個坐标軸上的最大或者最小尺寸
12.同另一個視圖比對高度/寬度
[item(==item)]
[item(<=item)]
[item(>=item)]
例如:[view1(==view2)]使view1沿着某個坐标的尺寸和view2的一緻
13.和父視圖齊平對齊
|[item]
[item]|
例如:V:|[view1] 使view1的頂部和父視圖頂部齊平
14.相對于父視圖的inset
|-[item]
[item]-|
例如:|-[view1]在某個坐标軸上,在父視圖和view1之間放置一個固定的間隔(20點)
15.相對于父視圖的自定義inset
|-gap-[item]
[item]-gap-|
例如:H:|-15-[view1] 将視圖嵌入父視圖,并使其距離父視圖前緣15點
16.優先級(從0到1000)
@value
例如:[view1(<[email protected])] 設定view1在某個坐标軸上的最大尺寸為50點,優先級為一個很低的值(20)