NSLayoutConstraint类是用来约束元素位置、大小的类别,可以用来适配不同屏幕和手机横屏竖屏,使界面元素在这些不同屏幕上显示的相对位置统一。
NSLayoutConstraint有两个构造函数
+(instancetype)constraintWithItem:(id) attribute:(NSLayoutAttribute) relatedBy:(NSLayoutRelation) toItem:(id) attribute:(NSLayoutAttribute) multiplier:(CGFloat) constant:(CGFloat)
+(NSArray)constraintsWithVisualFormat:(NSString*) options:(NSLayoutFormatOptions) metrics:(NSDictionary*) views:(NSDictionary)
第一种构造函数主要用来约束一个元素,第二个构造函数用于约束多个元素
NSLayoutAttribute 是一个枚举类型,一般常用的属性:
NSLayoutAttributeLeft:元素的左边界
NSLayoutAttibuteRight:元素右边界
NSLayoutAttributeTop:元素的上边界
NSLayoutAttributeBottom:元素的下边界
NSLayoutAttributeCenterX:元素中心点的x坐标
NSLayoutAttributeCenterY:元素中心点的y坐标
NSLayoutRelation也是一个枚举类型,只有3种情况
NSLayoutRelationLessThanOrEqual:被设置元素的属性小于或等于目标属性的值
NSLayoutRelationEqual:被设置元素的属性等于目标元素的属性值
NSLaoutRelationGreaterOrEqual:被设置元素额属性大于或等于目标属性的值
第二种构造函数中,views的Dictionary由NSDictionary的一个宏NSDictionaryOfVariableBinding来设置,其设置结果就是key等于元素名字
NSDictionaryOfVariableBinding(view1,view2);
//等效于下面的函数
[NSDictionary dictionaryWithObjectsAndKeys:view1,@"view1",view2,@"view2"];
第二种构造函数中的NSString参数结构为:
1.@”H:|-(left)-[aView(float)]-(right)-|” 设置元素aView的水平参数,包括元素宽度float,左边距left和右边距right,其中左右可以省略,但是中间那个元素宽度不行
2.@”V:|-(t)-[aView(f)]-(b)-|”设置元素aView的垂直参数,包括元素高度f,上边距距t和下边界b,其中上下可以省略,但是中间那个元素高度不行
应用举例:
1.不管横屏,竖屏元素始终居中
2.元素相当于父元素的上、左、下、右的距离
3.bView相对aVIew的位置