自动版式设置的UILabel高度为零
我有一个UILabel
的项目说明除其他意见,都奠定了在Interface Builder使用约束 - 你可以看到下面的图片中所有相关的约束。行数也设置为0
。自动版式设置的UILabel高度为零
,因为我想UILabel
基于它所包含的文本来调整我没有设置高度约束。相反,发生的事情是
[self.view layoutIfNeeded];
被称为之后,该UILabel
的高度被设置为0
。即使我没有其他文字设置为UILabel
,它有在Interface Builder设置商品描述的默认值。
上面的项目标题标签设置同样的方式,但一个不压扁到0
,所以我有点糊涂了。
没有人有这种行为的经验吗?
集3约束
1.Leading空间的SuperView
2.Trailing空间的SuperView
3.Top空间的SuperView
然后
@property (nonatomic, strong) IBOutlet UILabel *lbl;
- (void) viewDidLoad{
[self.lbl sizeToFit];
}
我的约束与您所建议的一样,只是如果标签变得太高,我还需要底部的约束来压低其他视图。但是,我设法通过将UILabel的垂直压缩阻力优先级设置为1000(默认750)来解决我的问题。 – artooras
CTRL从标签拖到自身>选择高度>设置常量高度NT为0,改变等于(==)比或equeal(> =)
这只确保它足够高至少一行文本,但其余的被截断,即标签没有自动调整 – artooras
请确保底部约束是正确的,因为这是做到这一点的方法:-)编辑:尝试通过删除底部约束来测试它。 –
好吧,看来你已经通过将拥抱改为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;
}
在此UIViewController
AutoLayout
不能满足所有的constraints
您设置,因此解雇那些对你UILabel
,导致压缩状态。你应该看看其他constraints
在UIViewController
,并设置的priority
到一个更高的数字。
控制台中是否有任何AutoLayout约束错误? AutoLayout由于冲突而放弃一些约束? – Alex
不,根本没有 – artooras
我知道你不想将高度硬化到那个UILabel,但是如果你这样做会发生什么?控制台中是否有任何AutoLayout约束冲突? – Alex