12

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

在此处输入图像描述

以下是错误和警告:

在此处输入图像描述

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

在此处输入图像描述 在此处输入图像描述

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

4

6 回答 6

13

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

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

第一个标签(左):

  • 引领空间到Superview
  • Superview 的顶部和底部空间
  • 到下一个标签的水平间距

第二个标签:

  • 用于超级视图的尾随空间
  • 顶部和底部到超级视图(或将顶部与第一个对齐)

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

这样,包含视图将根据需要增长以适应标签和它们之间的空间,并且始终位于父视图的中心。

我截取了我的测试约束的屏幕截图,以防它对您有更多帮助。

左侧标签的约束

右侧标签

希望这就是你要找的。

于 2015-03-17T18:35:02.230 回答
5

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

于 2013-11-01T06:30:57.183 回答
1

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

另一种选择是将左视图水平居中,并将数量 X 的右视图与左视图水平隔开。

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

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

于 2015-03-17T12:39:25.557 回答
1

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

于 2016-05-05T03:12:07.840 回答
0

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

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

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

你说

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

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

谢谢

于 2014-11-22T14:29:08.247 回答
0

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

于 2015-08-12T16:13:21.457 回答