+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
这个属性的类方法主要是表述了一个算法:
view1 的属性 (== <= >=) view2的属性*multiplier +c (c为constant,。即为约束距离)
view1 表示为一个视图
attr1 为第一个视图的属性
relation 表示view1 和view2之间的关系
view2 表示另一个视图 当设置为nil是表示view1 对自身的约束
attr2 表示第二个视图的属性
multiplier 表示倍数
constant 表示距离
其中 NSlayoutAttribute 在苹果文档中包含以下内容
typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
NSLayoutAttributeLeft = 1, 视图左边
NSLayoutAttributeRight, 视图右边
NSLayoutAttributeTop, 视图顶端
NSLayoutAttributeBottom, 视图下边
NSLayoutAttributeLeading, 视图左边( 不一定就是左边,之所以这样设定是国际化考虑)
NSLayoutAttributeTrailing, 视图右边
NSLayoutAttributeWidth, 视图宽度
NSLayoutAttributeHeight, 视图高度
NSLayoutAttributeCenterX, 视图 x的中心点
NSLayoutAttributeCenterY, 视图 y的中心点
NSLayoutAttributeLastBaseline, 视图底部基线
NSLayoutAttributeBaseline NS_SWIFT_UNAVAILABLE("Use 'lastBaseline' instead") = NSLayoutAttributeLastBaseline,
NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),
NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0), 距离左侧的间距
NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0), 距离右侧的间距
NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0), 距离顶部的间距
NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0), 距离底部的间距
NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),距离 左边的间距
NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0), 距离右边的间距
NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0), 距离视图中心点x的距离
NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0), 距离视图中心店y的距离
NSLayoutAttributeNotAnAttribute = 0
};
关于NSLayoutRelation
typedef NS_ENUM(NSInteger, NSLayoutRelation) {
NSLayoutRelationLessThanOrEqual = -1, 小于等于
NSLayoutRelationEqual = 0, 相等
NSLayoutRelationGreaterThanOrEqual = 1, 大于等于
};
view的translatesAutoresizingMaskIntoConstraints属性为遵循autolayout,舍弃原来设置的高度和宽度。