标签之间相对于视图中心的最小间距

时间:2018-08-22 10:49:14

标签: ios swift autolayout constraints

我的UITableViewCell中有两个标签,并且设置了约束以使它们位于单元格的中心:

func setConsraints() {

    // horizontal constraints

    // vertical constraints
    mainLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor, constant: someVariable).isActive = true
    infoLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor, constant: -someVariable).isActive = true
}

normal(期望的结果)


但是因为常量是一个变量,所以有时看起来像这样:

overlapping(不需要的结果)


我尝试在mainLabelinfoLabel之间添加一个约束,并优先考虑,但这些解决方案均无效。

问题:

如何为这两个标签添加“最小”约束,以使它们不会彼此重叠,而是同时将其居中放置在UITableViewCell上并保持一定距离?

2 个答案:

答案 0 :(得分:3)

如何将它们放置在具有所需间距的垂直UIStackView内,然后将stackview而不是标签居中放置。这样,您只需要管理1个视图的约束即可,而不是2个。

类似这样的: stackview setup

答案 1 :(得分:1)

您是否认为这是替代

func setConsraints() {

    // horizontal constraints

    // vertical constraints
    mainLabel.bottomAnchor.constraint(equalTo: contentView.centerYAnchor, constant: -someVariable).isActive = true
    infoLabel.topAnchor.constraint(equalTo: contentView.centerYAnchor, constant: someVariable).isActive = true
}

否则,您需要获取字符串的高度,并设置相对于该字符串的中心锚。有一些字符串扩展名,可让您获取特定宽度的字符串高度,例如answer。您可以使用它来获取标签的高度,然后在方法中将其一半添加到someVariable中。


编辑:我注意到您为mainLabel设置了一个正常数,而为infoLabel设置了一个负常数。如果您想让mainLabel位于中心位置上方,则需要为mainLabel添加负值,而为{{1}添加相反的值}。