AutoLayout+VFL

代码中的尺寸不要使用480、460这样的绝对数值,使用的UIScreen取设备的尺寸。

vfl使用规则

| :表示父视图

- :表示距离

V: :表示垂直

H: :表示水平

>= :表示视图间距、宽度和高度必须大于或等于某个值

<= :表示视图间距、宽度和高度必须小宇或等于某个值

== :表示视图间距、宽度或者高度必须等于某个值

@ :>=、<=、==限制 最大为1000

1.|-[view]-|:视图处在父视图的左右边缘内

2.|-[view] :视图处在父视图的左边缘

3.|[view] :视图和父视图左边对齐

4.-[view]- :设置视图的宽度高度

5.|-30.0-[view]-30.0-|:表示离父视图 左右间距30

6.[view(200.0)] :表示视图宽度为200.0

7.|-[view(view1)]-[view1]-|:表示视图宽度一样,并且在父视图左右边缘内

8.|-[view(view1)]-|:方括号表示view,圆括号表示尺寸数值。支持大小等于。或者另一个view(不支持倍数)

9. V:[view(50.0)] :视图高度为50

10:V:|-(==padding)-[imageView]->=0-[button]-(==padding)-|

:表示离父视图的距离

为Padding,这两个视图间距必须大于或等于0并且距离底部父视图为padding。

11: [wideView(>=60@700)] :视图的宽度为至少为60不能超过700,最大为1000

12:如果没有声明方向默认为水平H:

必要时使用单个约束。

+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

注意事项:

1.addConstraint(s)前,view应该去部被addSubView上去了。

2.不必给views写frame

3.给必要的view关掉AutoresizeingMask。[_aViewsetTranslatesAutoresizingMaskIntoConstraints:NO];

4.UILabel换行要写linebreakMode,要写numberOfLines(iOS7.0默认好像是1)

5.UILabel要想换行,一定要添加preferredMaxLayoutWidth。否则没法初始化宽度。

代码:命名必须有意义如vfl_phoneLabel_H表示水平约束

NSDictionary *views =NSDictionaryOfVariableBindings(_phoneNumLabel,_phoneNumField);

NSDictionary *metrics =@{@"hPadding":@25,@"vPadding":@10,@"imageEdge":@150.0};

NSString *vfl_phoneLabel_H =@"H:|-hPadding-[_phoneNumLabel]-vPadding-[_phoneNumField(_phoneNumLabel)]-hPadding-|";

NSString *vfl_phoneLabel_V = @"V:|-50-[_phoneNumLabel(30)]";

NSString *vfl_phoneField_V =@"V:|-50-[_phoneNumField(_phoneNumLabel)]";

[self.viewaddConstraints:[NSLayoutConstraint constraintsWithVisualFormat:vfl_phoneLabel_Hoptions:0 metrics:metrics views:views]];

[self.view addConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:vfl_phoneLabel_V options:0 metrics:metricsviews:views]];

[self.view addConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:vfl_phoneField_V options:0 metrics:metricsviews:views]];

你可能感兴趣的:(AutoLayout+VFL)