按比例设置宽高,间距大小的问题
1.如果某个视图是根据父视图的大小而定,那么可以把按着control键,拉一条线到它的父视图上面,选择一个Equia Widths,或者Equia Heights,前者是宽度随着父视图的大小而定,后者是高度随着父视图而定。
2.如果要做两个正方形并排放,这时候可以利用它本身自带的aspact ratio功能,让其高宽比例是1:1。按着control键拉一条线指向它自身,这时候就会出现这个选项。
Horizontal Center in Container —> 水平居中约束
Vertical Center in Container —> 垂直居中约束
上面4根线的作用设置距离父控件上下左右距离多少
下面width、height 设置控件自己的大小
托线设置约束
父子之间控件
Leading Space to Container Margin —> Leading Space to Container 距离父控件左边的间距
Trailing Space to Container Margin == Trailing Space to Container —> 距离父控件右边边的间距
Bottom Space to Container
Bottom Space to Container —> 距离父控件下边的间距
Center Horizontally in Container —> 与父控件水平居中
Center Vertical in Container —> 与父控件垂直居中
兄弟之间控件
Horizontal Spacing —> 相对于兄弟水平间距
Vertical Spacing —> 相对于兄弟竖直间距
Top —> 相对于兄弟上边距
Center Vertically —> 相对于兄弟垂直中心对齐
Baseline —> 文字距UI控件顶部的偏移量
Bottom —> 相对于兄弟下边距
Leading \ Left —> 相对于兄弟左边距
Center Horizontally —> 相对于兄弟水平中心对齐
Trailing \ Right —> 相对于兄弟右边距
Equal Widths —> 相对于兄弟宽度
Equal Heights —> 相对于兄弟高度
Aspect Ratio —>
Hold Shift To select multiple —> 按住Shift可以选择多个
Hold Option for alternates —> 按住Option可以替换(不好用)
代码设置约束
约束添加到who上
如果这个约束只与自己有关,那么添加到自己身上
如果这个约束自己与父控件有关,那么添加到父控件上
如果这个约束自己与其他控件有关系,那么添加到他们公共父辈的控件上
NslayoutConstraint *constraint = [NSlayoutConstraint constraintWithItem:view1 attribute:attr1 relatedBy:relation toItem:view2 attribute: attr2 multiplier:multiplier constant:c];
view1 : 要约束的view
attr1 : 那个属性(x, y, width, height)
NSLayoutAttributeLeft —> 左
NSLayoutAttributeRight —> 右
NSLayoutAttributeTop —> 上
NSLayoutAttributeBottom —> 下
NSLayoutAttributeLeading —> 左
NSLayoutAttributeTrailing —> 右
NSLayoutAttributeWidth —> 宽度
NSLayoutAttributeHeight —> 高度
NSLayoutAttributeCenterX —> 中心点X
NSLayoutAttributeCenterY —> 中心点Y
NSLayoutAttributeBaseline —> 基本线
NSLayoutAttributeLastBaseline —> 同 NSLayoutAttributeBaseline
NSLayoutAttributeFirstBaseline —> 第一条基本线
iOS8 新增约束
NSLayoutAttributeLeftMargin —> 左边距
NSLayoutAttributeRightMargin —> 右边距
NSLayoutAttributeTopMargin —> 上边距
NSLayoutAttributeBottomMargin —> 下边距
NSLayoutAttributeLeadingMargin —> 左边距
NSLayoutAttributeTrailingMargin —> 右边距
NSLayoutAttributeCenterXWithinMargins —> 中心X边距
NSLayoutAttributeCenterYWithinMargins —> 中心Y边距
NSLayoutAttributeNotAnAttribute —> 没有边距
relation : 约束关系
NSLayoutRelationLessThanOrEqual <=
NSLayoutRelationEqual ==
NSLayoutRelationGreaterThanOrEqual >=
view2 : 参照的view
attr2 : 参照的属性(x, y, width, height)
multiplier : 倍数关系
c : 额外的值, 在倍数之外的值
view1.attr1 relation(= or < or >) view2.attr2 * multiplier(倍数) + c
注意:1.一定先有父控件,再添加约束,否则会报错误.
// 使用约束一定要设置这个值,禁止系统把AutoresizingMask的一些设置转换成Autolayout
2. self.view1.translatesAutoresizingMaskIntoConstraints = NO;