使用AutoLayout定期间距

时间:2015-08-03 05:41:12

标签: ios swift autolayout nslayoutconstraint

这个问题对于AutoLayOut专家来说似乎太简单了,但仍然不符合我自己常用的AutoLayOut用法。 我习惯使用.Top.Bottom.Left.Right.CenterX.CenterY属性。但是在处理一些物体时我该怎么办?

例如,如果我有五个UILabel,我希望它们垂直对齐,并且有规则的间距。 对于X轴部分,很容易:

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

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

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

2 个答案:

答案 0 :(得分:2)

创建6个间隔视图。

参考here

答案 1 :(得分:1)

如果以编程方式添加它,并且如果要在运行时决定标签的数量,则应使用垂直间距将第一个标签与superview相关联。所有其余的你应该设置与你的标签相关联的垂直间距,在它上面创建相同的常量。

如果您正在为iOS 9开发,那么您可以实现Stack View并在没有实现Autolayout的情况下立即完成此功能。

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

创建每个标签后,在添加到父容器的子视图之前,获取所有子视图。如果数组计数为零,则添加约束与父容器相对应的垂直间距。将其添加为子视图

稍后在循环中添加任何更多标签时,将约束添加到与前一个视图/标签相对应的标签。以前的视图/标签引用你可以从子视图列表中获取它,我们将在每个周期中使用它。

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