iOS约束方程值-LMLPHP

我试图找出约束方程中左 View 和右 View 的值是什么。

目前,这就是我的看法。

坐标系中的原点(0,0)在左上方。

因此,靠近顶部和左侧的views.attribute较小。

在上面发布的图片中。
RedView.Leading具有比BlueView.trailing更高的值。
该方程式得到满足,因为在BlueView.trailing中添加了8。

下图中圈出的约束条件也是如此。
superView.top小于greyView.top,因为superView.top在origin.x上。

iOS约束方程值-LMLPHP

我的问题是相对于原点的值吗?

最佳答案

自动布局中的相对论

简短答案:
是的,没有。其实不行。但最重要的是:无关紧要!

详细答案:
布局属性是 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个点,因此
  • O2.x = O1.x – 20
  • O2.y = O1.y

  • 在此坐标系中,BlueView的后沿位于x = 120处。因此,我们得到:
    BlueView.trailing = 120
    RedView.leading = 1.0 × 120 + 8.0 = 128
    
    如您所见,布局属性BlueView.trailingRedView.leading的值在∑1和∑2中不同。但是, View 之间的水平间距是相同的
    RedView.leading – BlueView.trailing = 8
    
    在两个坐标系中。
    这就是自动版式的重点:
    描述 View 相对于彼此的位置和大小,而不是使用相对于特定坐标系的绝对值。

    这并不重要。

    但是,我想这就是让您问这个问题的原因,系统将需要在某个点“告诉”显示器为特定 View 绘制的像素。像素网格确实具有绝对原点和固定坐标系。
    因此,最终,系统将在求解所有约束方程之前,将布局属性替换为最外面的 View (窗口)。到那时,您的布局属性将相对于特定原点(很可能是窗口的原点在左上角,是的),但这根本无关紧要!
    苹果可以选择他们想要的任何坐标系(甚至是其原点在屏幕上方50个点的坐标系),并且无论使用哪种特定系统,布局都将在相同的约束条件下保持相同。

    关于iOS约束方程值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44361433/

    10-10 17:36