如何理解自动布局约束的第一项和第二项?
How to understand auto layout constraint's first item & second Item?
如果我在xib中使用tableView作为View的subView。而tableView是完全覆盖View的。但是在 xib 的属性中,我可以看到刚刚添加的两个垂直约束:第一个约束使用 tableView 的顶部作为第一个项目,superView 的顶部作为第二个项目,但是在第二个约束中,它表明 superview 的底部是第一个项目,并且tableView 的底部是第二项。 xib 决定使用 who 作为第一项和第二项的原因是什么。
所有约束都表示以下形式的公式:
firstItem.firstItemAttribute == secondItem.secondItemAttribute * multiplier + constant
(关系也可以是 <=
或 >=
。)
大多数情况下,乘数是 1,所以放弃:
firstItem.firstItemAttribute == secondItem.secondItemAttribute + constant
通常最容易用正常数来思考。所以,像这样:
view.Top == superview.Top + 20
有道理。视图的顶部比父视图的顶部低 20 点。 (在自动布局使用的坐标系中,Y向下增加,所以加上20点得到一个位置"below"。)
你可以交换项目,但是,如果你想要相同的关系,你需要取反常量:
superview.Top == view.Top + -20
-20 可能会让人更难理解。顺便说一下,Xcode 会愉快地交换这两项并为您取反常量。 (如果乘数不是 1,数学会变得有点复杂,但仍然有可能。)
如果你只是交换项目而不取反常量,它会表达不同的关系:
superview.Top == view.Top + 20
这意味着父视图的顶部将低于视图的顶部。或者,更确切地说,视图将位于父视图顶部的上方,并且它的顶部将被剪裁。
现在,对另一端的限制通常用另一个顺序的项目表示,因为您通常希望关系相反。也就是说,您希望视图的顶部低于父视图的顶部,但您希望视图的底部 高于 父视图的底部。因此,仅当您以其他顺序排列项目时,常数才为正:
superview.Bottom == view.Bottom + 20
如果我在xib中使用tableView作为View的subView。而tableView是完全覆盖View的。但是在 xib 的属性中,我可以看到刚刚添加的两个垂直约束:第一个约束使用 tableView 的顶部作为第一个项目,superView 的顶部作为第二个项目,但是在第二个约束中,它表明 superview 的底部是第一个项目,并且tableView 的底部是第二项。 xib 决定使用 who 作为第一项和第二项的原因是什么。
所有约束都表示以下形式的公式:
firstItem.firstItemAttribute == secondItem.secondItemAttribute * multiplier + constant
(关系也可以是 <=
或 >=
。)
大多数情况下,乘数是 1,所以放弃:
firstItem.firstItemAttribute == secondItem.secondItemAttribute + constant
通常最容易用正常数来思考。所以,像这样:
view.Top == superview.Top + 20
有道理。视图的顶部比父视图的顶部低 20 点。 (在自动布局使用的坐标系中,Y向下增加,所以加上20点得到一个位置"below"。)
你可以交换项目,但是,如果你想要相同的关系,你需要取反常量:
superview.Top == view.Top + -20
-20 可能会让人更难理解。顺便说一下,Xcode 会愉快地交换这两项并为您取反常量。 (如果乘数不是 1,数学会变得有点复杂,但仍然有可能。)
如果你只是交换项目而不取反常量,它会表达不同的关系:
superview.Top == view.Top + 20
这意味着父视图的顶部将低于视图的顶部。或者,更确切地说,视图将位于父视图顶部的上方,并且它的顶部将被剪裁。
现在,对另一端的限制通常用另一个顺序的项目表示,因为您通常希望关系相反。也就是说,您希望视图的顶部低于父视图的顶部,但您希望视图的底部 高于 父视图的底部。因此,仅当您以其他顺序排列项目时,常数才为正:
superview.Bottom == view.Bottom + 20