如何垂直居中2个垂直堆叠的UILabels

时间:2014-02-19 02:03:44

标签: ios objective-c

我有两个垂直堆叠的UILabel:

+----------------------------+
|  +----------------------+  |
|  | blah blah blah       |  |
|  +----------------------+  |
|                            |
|  +----------------------+  |
|  | asdf fdsa            |  |
|  | asdfear aoeirhaleir  |  |
|  +----------------------+  |
+----------------------------+

UIViews的文本在运行时动态加载,因此它们可能有1到3行文本。我想在文本加载后垂直对齐。它们应该沿着它们的“质心”垂直居中。

我怎么能做到这一点?

编辑:像这样: enter image description here

3 个答案:

答案 0 :(得分:4)

将两个标签放在容器UIView中。将标签的边缘限制在容器的边缘(顶部标签的底部和底部标签的顶部除外,它们应相互约束),然后将容器垂直居中放在顶层视图中。

您的视图层次结构应如下所示:

UIView rootView
  UIView containerView
    UILabel topLabel
    UILabel bottomLabel

具有以下约束条件:

|[topLabel]|
|[bottomLabel]|
V:|[topLabel][bottomLabel]|
|-[containerView]-|
[NSLayoutConstraint constraintWithFirstItem:containerView firstAttribute:NSLayoutConstraintAttributeCenterY relation:NSLayoutRelationEquals secondItem:rootView secondAttribute:NSLayoutConstraintAttributeCenterY multiplier:1 constant:0]

(您可以在IB中指定所有这些约束而不是代码;在StackOverflow帖子中描述IB约束更难。)

更新:在iOS的更新版本中,将标签放在垂直堆栈视图中更容易,而不是使用普通视图并手动设置其中的约束,但技术是相同。

答案 1 :(得分:1)

你可以用IB做到这一点。根据内容使其高度灵活。使它们之间的距离变小并固定。然后在上方和下方放置一个间隔视图,其中顶部的一个顶部约束到superview,一个底部约束绑定到顶部文本视图。底部间隔应该有一个顶部约束链接到底部文本视图,一个底部约束绑定到superview,所有空间都为零。

最后,制作一个高度约束,使2个间隔视图的高度相等。

答案 2 :(得分:0)

使用自动布局 - 通过手动NSLayoutContraint,可视格式语言(VFL),甚至通过Xcode / IB - 创建约束,使标签的宽度保持相等,其X中心等于超视图的X中心,以及根据您的需要,高度可变或有些相关。

Apple的Auto Layout Guide