代码中的尺寸不要使用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]];