如果我在xib中使用tableView作为View的subView.并且tableView完全覆盖了View.但是在xib的attributor中,我可以看到刚刚添加的两个垂直约束:第一个约束使用tableView的top作为第一个项目,superView的top作为第二个项目,但是在第二个约束中,它显示superview的底部是第一个项目,并且tableView的底部是第二个项目.是什么原因让xib决定使用谁作为第一项&第二项.
解决方法
所有约束都表达了以下形式的公式:
firstItem.firstItemAttribute == secondItem.secondItemAttribute * multiplier + constant
(关系也可以是< =或> =.)
大多数情况下,乘数为1,因此下降:
firstItem.firstItemAttribute == secondItem.secondItemAttribute + constant
从正常数的角度来考虑通常最容易.所以,像:
view.Top == superview.Top + 20
说得通.该视图的顶部比superview的顶部低20分. (在自动布局使用的坐标系中,Y增加,因此添加20个点会使位置“低于”.)
你可以切换周围的项目,但是,如果你想要相同的关系,你需要否定常量:
superview.Top == view.Top + -20
-20可能会让人更难理解.顺便说一句,Xcode会愉快地交换这两个项目并为你否定常数. (如果乘数不是1,数学会变得有点复杂,但它仍然可能.)
如果你只是交换周围的项目而不是否定常数,它会表达不同的关系:
superview.Top == view.Top + 20
这意味着superview的顶部将低于视图的顶部.或者更确切地说,视图将位于超视图顶部的上方,并且顶部将被剪裁.
现在,对另一端的约束通常用另一个顺序的项表示,因为你通常希望关系是相反的.也就是说,您希望视图的顶部位于superview的顶部下方,但您希望视图的底部位于superview的底部之上.因此,只有当您按其他顺序排列项目时,常量才是正数:
superview.Bottom == view.Bottom + 20