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