2016-08-23 54 views
0

我有一个tableview单元格和IM使用UIAutomaticDimensions功能来确保tableview单元格可以自己调整大小。该单元有3个标签和一个imageview作为其内容。现在问题在于标签和它们的垂直约束。除非标签中有文字标签不会显示。它只是覆盖标签之前的位置并使其非常小。我想要做的是始终显示所有三个标签,因此单元格的高度总是与另一个单元格相同。UILabels不显示,除非有文本tableviewcell自动布局

即使标签中没有文字,我如何才能实现显示标签?

继承人对内容约束的探索。

[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_prospect_avatar 
                  attribute:NSLayoutAttributeLeading 
                  relatedBy:NSLayoutRelationEqual 
                   toItem:self.contentView 
                  attribute:NSLayoutAttributeLeading 
                  multiplier:1.0 
                   constant:0.0f]]; 

[self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:_prospect_avatar 
                  attribute:NSLayoutAttributeTrailing 
                  relatedBy:NSLayoutRelationEqual 
                   toItem:self.contentView 
                  attribute:NSLayoutAttributeLeading 
                  multiplier:1.0f 
                   constant:100.0f]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_prospect_avatar]|" 
                     options:0 
                     metrics:nil 
                      views:NSDictionaryOfVariableBindings(_prospect_avatar)]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_prospect_avatar][_full_name_label]-|" 
                     options:NSLayoutFormatDirectionLeadingToTrailing 
                     metrics:nil 
                      views:NSDictionaryOfVariableBindings(_prospect_avatar,_full_name_label)]]; 
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_prospect_avatar][_phone_number_label]-|" 
                     options:NSLayoutFormatDirectionLeadingToTrailing 
                     metrics:nil 
                      views:NSDictionaryOfVariableBindings(_prospect_avatar,_phone_number_label)]]; 

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_prospect_avatar][_email_label]-|" 
                     options:NSLayoutFormatDirectionLeadingToTrailing 
                     metrics:nil 
                      views:NSDictionaryOfVariableBindings(_prospect_avatar,_email_label)]]; 

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_full_name_label][_email_label][_phone_number_label]-10-|" 
                     options:NSLayoutFormatAlignAllLeading 
                     metrics:nil 
                      views:NSDictionaryOfVariableBindings(_full_name_label,_email_label,_phone_number_label)]]; 
+0

另外我忘了补充。如果我只是在每个标签中放置一个空格,如果该标签的实际数据为零,则彼此之间的标签堆叠很好。 BUt我不认为这是解决我的问题的正确方法 – Esko918

+1

给所有的标签高度> = 20或你想要的所有限制。它会工作。 –

+0

啊,好吧,我明白你的意思,我完全忘记了这一点。大于或等于至少20分,那么它总是大于20分。我应该允许它自动更正自己? – Esko918

回答

1

马赫什Agrawala有正确的答案。在标签eah的垂直约束中,我必须为标签高度添加大于或小于值的值。因此,例如我以前的限制设置为

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_full_name_label][_email_label][_phone_number_label]-10-|" 
                    options:NSLayoutFormatAlignAllLeading 
                    metrics:nil 
                     views:NSDictionaryOfVariableBindings(_full_name_label,_email_label,_phone_number_label)]]; 

在真正的约束应该看起来像

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[_full_name_label(>=20)][_email_label(>=20)][_phone_number_label(>=20)]-10-|" 
                    options:NSLayoutFormatAlignAllLeading 
                    metrics:nil 
                     views:NSDictionaryOfVariableBindings(_full_name_label,_email_label,_phone_number_label)]]; 

如果你看看我的新的限制在每个标签结束约束我已添加(> = 20)就在追踪之前]这告诉自动布局,我至少要这个标签的高度为20点或更高

有很多其他的方法来做到这一点,所以这不是只有这样才能完成我的任务,但在这种情况下,这是最快的。