【问题标题】:Regular spacing with AutoLayout使用 AutoLayout 的规则间距
【发布时间】:2015-08-03 05:41:11
【问题描述】:

对于 AutoLayOut 专家来说,这个问题可能看起来太简单了,但仍然超出了我自己通常使用的 AutoLayOut 的范围。 我习惯使用.Top.Bottom.Left.Right.CenterX.CenterY 属性。但是处理几个对象怎么办呢?

例如,如果我有五个 UILabel(s),并且我希望它们垂直对齐,并且有规则的间距。 X轴部分,很简单:

    myXConstraint = NSLayoutConstraint(item: label1,
        attribute: .CenterX,
        relatedBy: .Equal,
        toItem: superView,
        attribute: .CenterX,
        multiplier: 1.0,
        constant: 0.0);

在 5 个标签中的每一个上都有这样的约束,它们将垂直对齐。

但是我应该如何写我的其他约束,让label1出现在顶部,然后是label2,label3 .....label5。 我希望顶部的空间、底部的空间以及每个连续标签之间的空间都是相同的值。

【问题讨论】:

  • 您是在运行时以编程方式创建标签还是使用 xib 插座创建标签?
  • NSLayoutConstraint.constraintsWithVisualFormat 可以使用。看,thishorizontal 的示例。你可以做到vertical
  • 我都在代码中(以编程方式)。
  • 如果您需要对我的以下答案进行代码方面的解释,请在此处发表评论...

标签: ios swift autolayout nslayoutconstraint


【解决方案1】:

创建 6 个间隔视图。

请参考here

【讨论】:

  • 我明白了,谢谢你的建议。我不得不承认,我有点失望 :) 确实,正如这些 cmets 和答案所暗示的,可以做一些烹饪来解决问题,但是......我希望有一个像 . equalSpaceOnX 和 .equallySpaceOnY ... 或类似的东西。
  • 没问题。由于很多人遇到这个问题,你可以为它写一个库。
【解决方案2】:

如果您以编程方式添加它并且如果您在运行时决定标签的数量,那么第一个标签应该使用垂直间距与超级视图相关联。其余的你应该设置与你的标签相关联的垂直间距,该标签是在它上面创建的,具有相同的常数。

如果您正在为 iOS 9 及更高版本进行开发,那么您可以实现 Stack View 并在不实现 Autolayout 的情况下立即完成此功能。

假设所有标签都将添加到最初为空的父容器视图中。

创建每个标签后,在将其作为子视图添加到父容器之前,获取所有子视图。如果数组计数为零,则将约束分别添加到父容器以实现垂直间距。将其添加为子视图

稍后在循环中添加更多标签时,将约束添加到与前一个视图/标签相对应的标签。上一个 view/labels 的参考,您可以从 subView 列表中获取它,我们将在每个周期中获取它。

最后一个堆栈将具有最近添加的视图/标签的引用。因此在子视图列表数组中,数组的最后一个索引是在当前视图/标签上方创建的标签。

【讨论】:

  • 我最终没有使用自动布局,我遇到了一些附带问题,实现自动布局比手动操作更复杂(在这种情况下)。
  • Autolayout 是针对多种尺寸设备的轻松有效的解决方案。获取概念时可能有点棘手。我建议您使用布局来实现那些,而不是手动执行。如果需要,我可以帮助您。
  • 谢谢。然后我应该回到代码并再次查看问题所在。但我知道,即使它有效,它也会比我现在拥有的代码长得多。此外,我同意 AutoLayout 通常很方便,而且是个好东西。
猜你喜欢
  • 2015-04-14
  • 2013-12-04
  • 2020-10-13
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
相关资源
最近更新 更多