天天看點

Auto Layout可視化格式

要始終牢記一點:所有的限制都是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)