Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 相对于视图中心的标签之间的最小间距_Ios_Swift_Autolayout_Constraints - Fatal编程技术网

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

Ios 相对于视图中心的标签之间的最小间距,ios,swift,autolayout,constraints,Ios,Swift,Autolayout,Constraints,我的UITableViewCell中有两个标签,并且设置了约束,使它们位于单元格的中心: func setConsraints() { // horizontal constraints // vertical constraints mainLabel.centerYAnchor.constraint(equalTo: contentView.centerYAnchor, constant: someVariable).isActive = true inf

我的
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
}

(预期结果)


但由于常数是一个变量,有时它看起来像:

(不想要的结果)


我尝试在
mainLabel
infoLabel
之间添加一个约束,并尝试使用优先级,但这些解决方案都不起作用

问题:

我如何添加一个“最小”约束来限制这两个标签,使它们不重叠,但同时将其定位到<代码> UITababVIEW Cys<代码>,保持一定的距离?

< P>
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
}
否则,您需要获取字符串的高度,并设置相对于该高度的中心锚点。有一些字符串扩展,允许您获取特定宽度的字符串高度,如下图所示。您可以使用它来获得标签的高度,并将其一半添加到方法中的
someVariable



编辑:我注意到您为
mainLabel
设置了一个正常量值,为
infoLabel
设置了一个负常量值。如果您希望<代码>主标签< /代码>为< >强> >强>中心,则需要在<代码>主标签< /代码>中添加<强>负->强>值,并与<代码>的反义词 >

您考虑过这个“强>备选< /强>?/P>

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
}
否则,您需要获取字符串的高度,并设置相对于该高度的中心锚点。有一些字符串扩展,允许您获取特定宽度的字符串高度,如下图所示。您可以使用它来获得标签的高度,并将其一半添加到方法中的
someVariable



编辑:我注意到您为
mainLabel
设置了一个正常量值,为
infoLabel
设置了一个负常量值。如果您希望
mainLabel
位于中心上方,则需要向
mainLabel
添加负值,将
infoLabel

相反的值添加到
infoLabel

的垂直视图中,以所需的间距将它们放置在垂直视图中,然后将堆栈视图置于中心,而不是标签。这样,您只需管理1个视图而不是2个视图的约束

有点像这样:

将它们以所需的间距放置在垂直视图中,然后将堆叠视图而不是标签居中,怎么样。这样,您只需管理1个视图而不是2个视图的约束

有点像这样:

增加某个变量的值?。不要让它小于某个值?@Larme为什么只为2个视图推荐stackView?它为继承权增加了另一种观点。如果涉及到许多遵循某个模式的视图,那么它将非常有用。为什么不在相对于contentView的中心进行设置时使用第一个视图的底部锚点和第二个视图的顶部锚点呢?否则,您需要计算标签高度并将间距设置为大于labelheight/2以获得任意数量的间距。是否有特殊原因需要将两个标签从垂直中心偏移?为什么不将
MainText
居中,并将
bottom
约束添加到
InfoText
?@rakeshashstri我不知道该怎么做:“相对于中心设置”。你介意在回答时给我看一下吗?SylvanDAsh:那么两个标签就不会在单元格中居中了吗?增加某个变量的值?。不要让它小于某个值?@Larme为什么只为2个视图推荐stackView?它为继承权增加了另一种观点。如果涉及到许多遵循某个模式的视图,那么它将非常有用。为什么不在相对于contentView的中心进行设置时使用第一个视图的底部锚点和第二个视图的顶部锚点呢?否则,您需要计算标签高度并将间距设置为大于labelheight/2以获得任意数量的间距。是否有特殊原因需要将两个标签从垂直中心偏移?为什么不将
MainText
居中,并将
bottom
约束添加到
InfoText
?@rakeshashstri我不知道该怎么做:“相对于中心设置”。你介意在回答时给我看一下吗?西尔万达什:那两个标签就不会再在牢房里居中了吗?谢谢,不过我已经试过了。问题是我的细胞也有一个动态的高度,这就是为什么我求助于中心的细胞,而不是它。至于你的编辑,那是我的错误。我输入了正确的密码,所以没有思考:p。@HennyLee我的答案仍然以单元格为中心,但方式不同。请注意,它们是相对于contentView的中心的,这正是您想要实现的。你可以试着用动态高度检查代码。我的错,我没有正确阅读你的答案。现在工作很好。谢谢谢谢,不过我已经试过了。问题是我的细胞也有一个动态的高度,这就是为什么我求助于中心的细胞,而不是它。至于你的编辑,那是我的错误。我输入了正确的密码,所以没有思考:p。@HennyLee我的答案仍然以单元格为中心,但方式不同。请注意,它们是相对于contentView的中心的,这正是您想要实现的。你可以试着用动态高度检查代码。我的错,我没有正确阅读你的答案。现在工作很好。谢谢我认为仅用于2个视图的堆栈视图不是最佳的,因为它为一个简单布局的继承者结构添加了另一个视图,而没有堆栈视图的布局不需要太多的工作。实际上,有人把它作为一条评论贴了出来,我对此做出了回应。就我个人而言,我喜欢它的观点,并且可以自由地使用它。我把它们相互嵌套在一起