我刚刚阅读了一些关于如何以编程方式操作约束数的信息,但我认为我需要使用Xcode直观地看到它。所以我决定放一个这样的UIView,看看Constraints发生了什么:
自动创建4个约束:
修改数字后,我得到了所有这些的含义。我们有2个垂直空间和2个水平空间。但是让我们首先关注垂直......
从屏幕顶部测量的垂直空间之一(我认为是超视图),我给出了这个数字30.和从底部测量的其他垂直空间,我给了-50。
现在,当它变成代码时,我真的不明白如何给出这两个数字。据我所知,这里是如何用代码设置约束:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:_screenView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:_container
attribute:NSLayoutAttributeHeight
multiplier:20
constant:200];
[_screenView addConstraint: myConstraint];
我们假设_screenView
是一个超级视图,_container
是UIView放在它上面。我有3个问题:
NSLayoutConstraint
?[_screenView addConstraint: myConstraint];
两次吗?multiplier
用于什么?因为我在故事板中没有看到这个选项。答案 0 :(得分:6)
我认为在处理约束时,从Apple的Auto Layout Guide中考虑这个公式非常重要:
y = m*x + b, where:
y and x are attributes of views.
m and b are floating point values.
您可以将_container顶部的约束视为:
_containter.top = m*_screenView.top + b
使用NSLayoutConstraint constraintWithItem:...
创建约束时,乘数参数为“m”,此公式中的常量为“b”。要创建一个约束,使_container的顶部保持在_screenView顶部以下30个点,您可以这样做:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:_container
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:_screenView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:30.0];
底部约束是:
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:_container
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:_screenView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:-50.0];
另请注意,在UIKit坐标系中,X值从左向右上升,Y值从上到下上升。换句话说,0,0位于屏幕的左上角,值从那里开始。
如果要创建上面显示的四个约束,则必须单独创建它们。您还可以使用NSLayoutConstraint的constraintsWithVisualFormat:options:metrics:views:
方法一次创建多个。我发现用上面的方式写出来就更清楚了。