如何水平居中两个标签?

时间:2013-11-01 06:23:34

标签: ios objective-c interface-builder autolayout uilabel

我有非常简单的要求,其中两个标签必须水平居中。所以,我选择了它们并选择了Editor-> align->水平中心。然后将容器约束的顶部空间添加到它们。我还需要标签来缩小/增加内容大小。但是,IB显示错误和几个警告。我可以通过在它们之间添加引脚(水平空间)来使标签缩小/增长,但在这种情况下它们不会居中。以下是截图:

enter image description here

以下是错误和警告:

enter image description here

更新 theraven提出了一个有趣的建议,即使用虚拟视图将其水平居中并将两个标签固定到它上面。我删除了所有现有的约束,添加了这个虚拟视图和中心X +中心Y约束。然后为它添加了两个标签(添加了水平空间约束)。但是,我仍然收到一堆错误和警告:

enter image description here enter image description here

UPDATE2 只是更新问题,但仍未找到有效答案。 @Theraven解决方案适用于iPhone4,iPhone4S,iPhone5和iPhone5S,但它不是真正的中心,而是一种解决方法。因此,对于iPhone6和iPhone6 Plus,它不起作用,因为前导和尾随空格将被修复,并且不会自动调整大小的宽度。

6 个答案:

答案 0 :(得分:11)

您可以做的是将两个标签添加到另一个视图,例如容器视图。然后,您需要水平居中这个并添加必要的约束。 要添加包含UIView,您可以选择这两个标签,转到Editor -> Embed In -> View

然后,您需要添加约束以使包含视图适合两个标签。所以像这样:

第一张标签(左一张):

  • 领导超级视野的空间
  • Superview的顶部和底部空间
  • 到下一个标签的水平间距

第二张标签:

  • 追踪空间到superview
  • 顶视图和底视图以超级视图(或与第一个顶部对齐)

然后,包含视图应调整大小以适合两个标签。然后,您需要做的就是为此容器视图添加顶部偏移约束,并在父视图中对其进行水平对齐。

这样,包含视图将增加所需的数量以适应两个标签及它们之间的空间,并始终在父视图中居中。

我拍摄了测试约束的屏幕截图,以防它对您有所帮助。

The constraints for the left side label

Right-side label

希望这就是你要找的东西。

答案 1 :(得分:5)

要解决此问题,请在两个标签之间使用空白UIView并将其水平居中。然后将两个标签固定在居中的空白视图的两侧。在自动布局中使用这样的间隔视图是常见的惯例。

答案 2 :(得分:1)

我真的不喜欢为了estethic而添加另一个视图的想法。

另一种选择是将左视图水平居中,并在水平方向上将左边的视图与左视图放在一起。

然后给第一个视图的水平对齐约束给出一个等于第一个视图宽度加上视图距离的一半的负值。或者使用前面评论中所述的乘数。

但这只适用于固定宽度的视图我猜。

答案 3 :(得分:1)

使用居中UIStackView作为两个标签的容器,需要间距。

答案 4 :(得分:0)

我真的不明白你想做什么。

您得到的错误(在第一个屏幕截图中)是您缺少标签x位置的约束。

对于UILabel,你必须对容器视图的y和x位置都有约束,当你同时选择它们并选择Editor-> align->水平居中时,你只需说label1.center.x = label2.center.x。 您仍然需要说明它们在容器视图中的位置,您将顶部空间添加到容器中,因此您确实具有y位置,但您没有说明x位置应该在哪里。

你说

  

我有非常简单的要求,其中两个标签必须水平居中

但他们的容器应该在哪里呢?

感谢

答案 5 :(得分:0)

使用spacer视图是我能想到的最好的解决方案,即使它对开发人员来说看起来很难看。用户甚至不知道幕后发生了什么,一旦你有了UIView间隔,你就可以随时重复使用它。