使用自动布局将视图定位在 (c + (x * superview.width))

Using autolayout to position view at (c + (x * superview.width))

目前我对自动布局有点困惑。我在 .xib 文件中有一个 UITableViewCell

我的目标是从第一行所在的位置 (x = 74) 开始,在单元格上获得一组水平等间距的垂直线。

我一直在尝试自动布局约束的大量组合,但我似乎无法做到正确。让我最接近的约束如下:

然而,multiplier让我彻底糊涂了。在第一个屏幕截图中,multiplier621(从左到右),考虑到位置,这对我来说意义不大的观点。

最终目标基本上是让每一行定位在:(c + (x * superview.width)),在这种情况下,c74xmultiplier .

有人可以在这里给我一些指示吗?谢谢!

终于,我找到了一个解决方案,我在下面详细介绍了它:

  1. 按住 Control 从子视图拖动到父视图并创建一个 Trailing Space to Container 约束
  2. 双击边栏中的约束
  3. Second Item 更改为 <subview>.Center X
  4. 颠倒第一项和第二项
  5. constant 更改为 -74
  6. multiplier改为0.14的倍数,从左边开始

我最终遇到了这个限制:

我认为如果使用间隔视图,您可能会发现事情更容易。使用尽可能多的垂直线之间的差距。将它们的宽度限制为相等。限制水平间距,使它们 运行 顺序为 [line][spacer][line]….

但是,要解决您提出的问题:select 第一个项目的弹出菜单(在您的屏幕截图中显示 Superview.Center X)并告诉 Xcode 交换第一项和第二项。乘数适用于第二项的属性。

约束的一般形式是:

firstItem.firstAttribute == secondItem.secondAttribute * multiplier + constant

(关系也可以是 <=>=。)

您的屏幕截图转换为:

Superview.Center X == Image View.Center X * 6 + 69

您乘以图像视图的中心 X 坐标,考虑到您描述的目标,这没有意义。你大概想要这样的东西:

Image View.Center X == Superview.Width * 1/3 + 69

问题是,如果 "works" 定义为 "vertical lines equally spaced horizontally",您将永远找不到适用于所有 devices/orientation(具有不同宽度)的乘数。为此,您需要:

Image View.Center X == (Superview.Width - 69) * 1/3 + 69

也就是说,您需要乘以宽度减去起点后的余数。

您可以将线条嵌入子视图中,在这种情况下您不需要 69 点起始值。