我试图找出约束方程中左 View 和右 View 的值是什么。
目前,这就是我的看法。
坐标系中的原点(0,0)在左上方。
因此,靠近顶部和左侧的views.attribute较小。
在上面发布的图片中。
RedView.Leading具有比BlueView.trailing更高的值。
该方程式得到满足,因为在BlueView.trailing中添加了8。
下图中圈出的约束条件也是如此。
superView.top小于greyView.top,因为superView.top在origin.x上。
我的问题是相对于原点的值吗?
最佳答案
自动布局中的相对论
简短答案:
是的,没有。其实不行。但最重要的是:无关紧要!
详细答案:
布局属性是 View 位置和大小的抽象描述。
排名属性:
尺寸属性:
虽然size属性可以描述绝对值(例如
view.height = 20.0
),但位置属性始终相对于另一个位置属性。这就是Apple在其示例中仅显示两个 View 而没有任何坐标系的原因。等式RedView.leading = 1.0 × BlueView.trailing + 8.0
指出RedView
的前沿始终在BlueView
的后沿右边8.0个点。基础坐标系的原点无关紧要!假设我们有一个坐标系∑1,其原点为O1,并假设
BlueView
的后沿相对于该原点位于x = 100处。这意味着:BlueView.trailing = 100
RedView.leading = 1.0 × 100 + 8.0 = 108
现在我们来看一个不同的坐标系∑2,其原点O2向左偏移20个点,因此在此坐标系中,
BlueView
的后沿位于x = 120处。因此,我们得到:BlueView.trailing = 120
RedView.leading = 1.0 × 120 + 8.0 = 128
如您所见,布局属性BlueView.trailing
和RedView.leading
的值在∑1和∑2中不同。但是, View 之间的水平间距是相同的RedView.leading – BlueView.trailing = 8
在两个坐标系中。这就是自动版式的重点:
描述 View 相对于彼此的位置和大小,而不是使用相对于特定坐标系的绝对值。
这并不重要。
但是,我想这就是让您问这个问题的原因,系统将需要在某个点“告诉”显示器为特定 View 绘制的像素。像素网格确实具有绝对原点和固定坐标系。
因此,最终,系统将在求解所有约束方程之前,将布局属性替换为最外面的 View (窗口)。到那时,您的布局属性将相对于特定原点(很可能是窗口的原点在左上角,是的),但这根本无关紧要!
苹果可以选择他们想要的任何坐标系(甚至是其原点在屏幕上方50个点的坐标系),并且无论使用哪种特定系统,布局都将在相同的约束条件下保持相同。
关于iOS约束方程值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44361433/