2012-10-08 48 views
5

我有一个UILabel我有时想在一个单元中垂直居中。这必须以编程方式完成。我试着添加以下约束居中(LOCNAME是的UILabel):ios 6:使用自动布局约束垂直居中UILabel

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

这是结果我得到:

enter image description here

它看起来像它的中心,但也许改变UILabel或什么的高度?

下面是IB视图控制器:

enter image description here

我如何能实现垂直居中编程?

+0

为什么这必须通过编程来完成?为什么你不能简单地使用IB来设计一个不同的单元格,而是隔离它而不是这个单元格? – slf

+0

谢谢!这将为我的具体情况做伎俩。如果我们不处理细胞,你会怎么做?假设我们只是试图以一个通用的UIView为中心来编程地标记一个标签? –

+0

这可能不是最好的方法,但我可能会计算高度并做一些数学计算CGRect的框架。 – slf

回答

0

尝试达到中心后的UIlabel高度吗???

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

3

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

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

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

您可能需要为这些其他约束制定出口并将其移除以实现居中设计。