ios 6:使用自动布局约束垂直居中 UILabel

Posted

技术标签:

【中文标题】ios 6:使用自动布局约束垂直居中 UILabel【英文标题】:ios 6: Center UILabel vertically using Auto Layout constraints 【发布时间】:2012-09-28 17:11:27 【问题描述】:

我有一个UILabel 我有时想在单元格中垂直居中。这必须以编程方式完成。我尝试添加以下约束以使其居中(locName 是 UILabel):

[cell addConstraint:[NSLayoutConstraint constraintWithItem:cell
attribute:NSLayoutAttributeCenterY relatedBy:0 toItem:cell.locName 
attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];

这是我得到的结果:

它看起来像它的中心,但可能会改变 UILabel 的高度或其他什么?

这是 IB 中的视图控制器:

如何以编程方式实现垂直居中?

【问题讨论】:

为什么必须以编程方式完成?为什么不能简单地使用 IB 设计一个不同的单元并隔离它而不是这个? 谢谢!这将解决我的具体情况。如果我们不处理细胞,你会怎么做?假设我们只是试图以编程方式将标签居中在通用 UIView 中? 这可能不是最好的方法,但我可能会计算高度并做一些数学运算来确定框架的 CGRect 应该是什么。 【参考方案1】:

您可能遇到了单元格中已经存在的其他约束。添加约束不会使其他约束消失 - 例如,如果您在顶部和底部标签之间有间距,为了满足这个和新的居中约束,顶部标签的高度将不得不缩小。

您可能需要为这些其他约束创建出口并删除它们以实现居中设计。

【讨论】:

【参考方案2】:

这个怎么样: 除了居中约束之外,为 cell.locName 添加一个高度约束以使其更高。

[cell.contentView addConstraint:
    [NSLayoutConstraint constraintWithItem:cell.locName
                                 attribute:NSLayoutAttributeHeight
                                 relatedBy:NSLayoutRelationGreaterThanOrEqual
                                    toItem:nil
                                 attribute:NSLayoutAttributeNotAnAttribute
                                multiplier:1
                                  constant:20]];

【讨论】:

【参考方案3】:

居中后尝试达到 UIlabel 高度???

或者您可以以编程方式在您的自定义单元格中重新分配标签位置。

【讨论】:

以上是关于ios 6:使用自动布局约束垂直居中 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

在 IOS 中使用自动布局在邻居之间居中视图

如何使用自动布局使两个标签垂直居中

以编程方式自动布局不垂直居中

hidesBottomBar 垂直居中布局推送时

自动布局视图 xib - 没有可编辑的约束?我需要居中的元素

ios 自动布局水平跟垂直居中