如何水平居中两个标签?

问题描述 投票:12回答:6

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

这是错误和警告:

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

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

ios objective-c interface-builder autolayout uilabel
6个回答
12
投票

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

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

第一个标签(左一个):

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

第二个标签:

  • 尾随空间到superview
  • 顶视图和底视图(或与第一个顶部对齐)

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

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

我对我的测试约束进行了截图,以防它对您有所帮助。

希望这是你想要的。


5
投票

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


1
投票

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

另一种替代方案是使左视图水平居中,并将X左侧的右视图水平放置。

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

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


1
投票

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


0
投票

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

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

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

你说

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

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

谢谢


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.