336*_*784 9 constraints ios autolayout nslayoutconstraint swift
我试图找出约束方程中左右视图的值是什么.
目前这就是我的看法.
坐标系中的原点(0,0)位于左上角.
因此,靠近顶部和左侧的views.attribute更小.
在上面张贴的图片中.RedView.Leading的值高于BlueView.trailing.满足等式因为8被添加到BlueView.trailing.
这同样适用于下图中带圆圈的约束.superView.top小于greyView.top,因为superView.top在origin.x上.
我的问题是相对于原点的值?
是和不是。其实更没有。但最重要的是:这无关紧要!
\n布局属性是视图位置和大小的抽象描述。
\n虽然大小属性可以描述绝对值(例如view.height = 20.0),但位置属性始终相对于另一个位置属性。这就是为什么苹果在他们的例子中只显示了两个视图,没有任何坐标系。等式
RedView.leading = 1.0 \xc3\x97 BlueView.trailing + 8.0\nRun Code Online (Sandbox Code Playgroud)\n表示 的前缘始终位于后缘RedView右侧的 8.0 点。BlueView底层坐标系的原点并不重要!
假设我们有一个坐标系 \xe2\x88\x91 1,其原点为 O 1,并且假设 的BlueView后沿相对于该原点位于 x = 100 处。这意味着:
BlueView.trailing = 100\nRedView.leading = 1.0 \xc3\x97 100 + 8.0 = 108\nRun Code Online (Sandbox Code Playgroud)\n现在我们看一个不同的坐标系 \xe2\x88\x91 2,原点为 O 2向左移动 20 个点,所以
\n在这个坐标系中BlueView的后缘位于 x = 120 处。因此我们得到:
BlueView.trailing = 120\nRedView.leading = 1.0 \xc3\x97 120 + 8.0 = 128\nRun Code Online (Sandbox Code Playgroud)\n正如您所看到的,布局属性的值在 \xe2\x88\x91 1BlueView.trailing和\xe2\x88\x91 2中是不同的。但是,视图之间的水平间距是相同的RedView.leading
RedView.leading \xe2\x80\x93 BlueView.trailing = 8\nRun Code Online (Sandbox Code Playgroud)\n在两个坐标系中。
\n描述视图相对于彼此的位置和大小,而不是使用相对于特定坐标系的绝对值。
\n\n\n当我告诉你把车停在邻居车后面并留出 1 米的间隙时,你知道该怎么做,对吧?不知道路从哪里开始!
\n
这并不重要。
\n然而 \xe2\x80\x93 ,我想这就是让你问问题 \xe2\x80\x93 的原因,系统需要在某个时刻“告诉”显示器为特定视图绘制哪些像素。并且像素网格确实有绝对原点和固定的坐标系。
\n因此最终,系统将在求解所有约束方程之前替换最外层视图(窗口)的布局属性。那时,您的布局属性将与特定原点相关(很可能是窗口的原点在左上角,是的),但它根本不相关!
\n苹果可以选择他们想要的任何坐标系(甚至是原点位于屏幕上方 50 点的坐标系),并且无论使用哪种特定系统,在相同的约束条件下,您的布局仍然看起来相同。
\n| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |