NSLayoutConstraint是描述两个控件之间约束关系的对象,它的构造方法:
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
每一个NSLayoutConstraint可以描述成下面形式的方程式:
view1.attr1 = multiplier × view2.attr2 + constant
构造方法里的NSLayoutRelation是个枚举值,可以表示方程式是等于,小于或大于。
NSLayoutAttributeBaseline
It is, what is it called. The baseline of the text of a view.
Imagine you have view with text inside, let's say a label. And you have another view with that, but it has a box around it (so it is taller). Aligning the top edge or the bottom edge would have the text on different heights. With this attribute, you can align the text in two views of different kinds.
Here is an example with top, bottom and baseline alignment
NSLayoutAttributeLeft和NSLayoutAttributeLeftMargin
NSLayoutAttributeLeft表示一个控件的左边缘,NSLayoutAttributeLeftMargin表示一个控件左边缘间距。我们设置一个红色的ContainerView作为父视图来看一下这两个的使用效果:
屏幕快照 2018-03-01 下午3.44.21.png 屏幕快照 2018-03-01 下午3.45.27.png这种情况下是父视图的左边缘到Label的左边缘距离是100;
屏幕快照 2018-03-01 下午3.50.13.png
这种情况是父视图左边缘的间距距离Label1的距离是100;
屏幕快照 2018-03-01 下午3.52.19.png这种情况是父视图左边缘距离Label2的左边缘间距是100,实际上父视图的左边缘到Label2的左边缘等于100-Label2的左边缘。
屏幕快照 2018-03-01 下午4.04.50.png这种情况是父视图左边的间距距离Label3的左边的间距距离是100。
layoutMargins
上面使用的间距是由view到的这个属性决定的。
如果view是UIViewController的root view,则由系统设置和管理边距,其反映了安全区的边距和系统的最小边距, 顶部和底部边距设置为零点。 侧左右边距取决于当前的尺寸等级,但可以是16点或20点,无法更改这些边距。打印出来的值是{0,0,0,0}。
其他类型的view默认边距是每边8个点。
使用此属性可指定视图边缘与任何子视图之间所需的空间量(以点为单位)。 自动布局使用您的边距作为放置内容的提示。 例如,如果使用格式字符串“| - [subview] - |”指定一组水平约束,则子视图的左边和右边将从相应的布局页边距超视图的边缘插入。 如果视图的边缘接近超级视图的边缘,并且保留视图的透视边框属性为YES,则可以增加实际的布局边距以防止内容与超视图的边距重叠。
网友评论