我有两个垂直堆叠的UILabel:
+----------------------------+
| +----------------------+ |
| | blah blah blah | |
| +----------------------+ |
| |
| +----------------------+ |
| | asdf fdsa | |
| | asdfear aoeirhaleir | |
| +----------------------+ |
+----------------------------+
UIViews的文本在运行时动态加载,因此它们可能有1到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。