2016-08-23 5 views
0

私はtableviewセルを持っていて、UIAutomaticDimensions機能を使用して、tableviewセルのサイズを確認できます。セルには3つのラベルとその内容としての画像ビューがあります。今問題は、ラベルとその垂直方向の制約です。ラベルにテキストがない限り、ラベルは表示されません。ラベルの前の位置を上書きして、セルを非常に小さくします。私は、セルの高さが常に別のセルと同じになるように、3つのラベルを常に表示したいと考えています。UILabelsは、テキストがない限り表示されません。tableviewcell autolayout

ラベルにテキストが表示されない場合でも、どのように表示することができますか?

内容の制約を明確にします。

[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

また、私は追加するのを忘れました。それは、ラベルの実際のデータがnilであれば、各ラベルにスペースを置くだけで、ラベルは互いの上にスタックします。私の問題を解決する正しい方法だとは思わないでください。 – Esko918

+1

すべてのラベルを高さ> = 20、またはすべての制約に合わせて指定してください。それが動作します。 –

+0

ああ、私はそれを完全に忘れていたのですか?少なくとも20ポイント以上であれば、常に20ポイント以上になります。私はそれがそれ自身を自動サイズ調整することを許すべきですか? – Esko918

答えて

1

マヘシュAgrawalaは、正しい答えを持っています。ラベルの垂直方向の制約では、ラベルの高さの値よりも大きいか小さい値を追加する必要があります。あなたが私の新しい制約を見れば本当に制約は、各ラベルの最後に

[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)]]; 

のように見えている必要がありますときに、私が以前に制約のために設定されていたもの、たとえば

[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)]]; 

ました私は、このラベルを20ポイント以上の高さにしたいということをautolayoutに伝えます。

これを行うには他にもたくさんの方法があります。私の仕事を達成するための唯一の方法ですが、この状況では最も速かったです。

関連する問題