自动版式设置的UILabel高度为零

问题描述:

我有一个UILabel的项目说明除其他意见,都奠定了在Interface Builder使用约束 - 你可以看到下面的图片中所有相关的约束。行数也设置为0自动版式设置的UILabel高度为零

enter image description here

,因为我想UILabel基于它所包含的文本来调整我没有设置高度约束。相反,发生的事情是

[self.view layoutIfNeeded]; 

被称为之后,该UILabel的高度被设置为0。即使我没有其他文字设置为UILabel,它有在Interface Builder设置商品描述的默认值。

上面的项目标题标签设置同样的方式,但一个不压扁到0,所以我有点糊涂了。

没有人有这种行为的经验吗?

+0

控制台中是否有任何AutoLayout约束错误? AutoLayout由于冲突而放弃一些约束? – Alex

+0

不,根本没有 – artooras

+0

我知道你不想将高度硬化到那个UILabel,但是如果你这样做会发生什么?控制台中是否有任何AutoLayout约束冲突? – Alex

我设法通过在Interface Builder中设置UILabelvertical compression resistance priority1000(默认750)来解决它。

enter image description here

由于我的意见被嵌入另一种观点认为,与父视图的底部取决于最低的子视图的底部,我只能推测,UILabel没有高度限制在过程中受到挤压布置意见。或许在链条的某个地方玩弄其他限制的优先级可能会产生相同的结果,但我无法成功完成。上面的解决方案,但是,工作,这对我来说足够好。

希望这可以帮助别人。

集3约束

1.Leading空间的SuperView

2.Trailing空间的SuperView

3.Top空间的SuperView

然后

@property (nonatomic, strong) IBOutlet UILabel *lbl; 

- (void) viewDidLoad{ 
    [self.lbl sizeToFit]; 
} 
+1

我的约束与您所建议的一样,只是如果标签变得太高,我还需要底部的约束来压低其他视图。但是,我设法通过将UILabel的垂直压缩阻力优先级设置为1000(默认750)来解决我的问题。 – artooras

CTRL从标签拖到自身>选择高度>设置常量高度NT为0,改变等于(==)比或equeal(> =)

+0

这只确保它足够高至少一行文本,但其余的被截断,即标签没有自动调整 – artooras

+0

请确保底部约束是正确的,因为这是做到这一点的方法:-)编辑:尝试通过删除底部约束来测试它。 –

+0

好吧,看来你已经通过将拥抱改为1000来修复它了。是由于添加了我的约束或您添加的内容?无论哪种方式,检查一些东西是正确的答案。 –

我认为你需要在标签上设置5个约束较大:

  • 领先的空间来上海华
  • 尾随空间的SuperView
  • 垂直空间 “项目”
  • 垂直空间 “名称”
  • 身高

然后在你的约束高度控制器添加一个IBOutlet(比方说labelHeight)。

因此,在您viewDidLoad中,你将能够设定此限制值:

@property (weak, nonatomic) IBOutlet UILabel *label; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *labelHeight; 


- (void) viewDidLoad{ 
    [self.label sizeToFit]; 
    labelHeight.constant = self.label.frame.size.height; 
} 

在此UIViewControllerAutoLayout不能满足所有的constraints您设置,因此解雇那些对你UILabel,导致压缩状态。你应该看看其他constraintsUIViewController,并设置​​的priority到一个更高的数字。