私は次の状況にあります:
- 自動レイアウトを使用しています
- 情報テキスト用のを
UITableViewCell
含むがあります。UILabel
この下には、 「価格変更」(2番目の画像を参照)などのUILabel
他のUI要素と、ボタン(画像には表示されていません)などの他の要素があります。uilabel
- 情報テキスト
uilabel
の高さは動的であるため、下の要素は情報テキストラベルの高さに応じて垂直方向に下に移動します。 - 最初の写真では、水平線を見ることができます。情報ラベルの高さが高くなると、この水平線は垂直方向に下に移動します。「価格変更」ラベルは、この水平線の位置に応じて垂直方向に配置されます。
これは正常に機能します。情報テキストが大きくなると、他の要素は希望どおりに下に移動します。
今私の問題:情報テキストがないため、情報ラベルと水平セパレーターを非表示にする必要がある場合があります。残念ながら、uilabelの下の要素は、非表示になっていますが、ラベルの高さだけ下に移動します。私の写真の右側を見てください。要素は、赤い縦棒でマークされた量だけ上に移動する必要があります。
情報ラベルと「需要」ラベルが非表示になっている場合は、「価格が変更されました」などの要素を上に移動するように指示するにはどうすればよいですか。
アップデート:
ここで、2つのNSLayoutContstraintsをコードに追加し、ストーリーボードで作成された制約に接続しました(3番目の画像をご覧ください)
ここに説明があります。最初に2つのNSLayoutConstraintsを取得しました。horizontalSeparatorContstraintは、「PriceChangesin」ラベルを最初の水平セパレータUIImageViewに接続します。「Demands」と「SpecialRequestsLabel」が非表示になっている場合、この制約が有効になり、「Pricechangesin」ラベルが上に移動するように値を4単位に設定しました。2番目の制約:demandsLabelContstraint-これは、2番目の水平UIImageViewと「価格変更」ラベルの間の不要なスペースを示します。ギャップは4単位である必要があります。また、特別なリクエストのテキストが利用可能な場合、この制約は「acitve」である必要があります。
ここにいくつかの新しいコードがあります:
if( tour.specialRequests.length > 0 ) {
[demandsLabelContstraint setPriority:UILayoutPriorityDefaultHigh];
[horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultLow];
self.demandsLeftLabel.text = NSLocalizedString(@"GenericTour_Demands", @"");
self.demandsRightLabel.text = tour.specialRequests;
demandsLeftLabel.hidden = NO;
demandsRightLabel.hidden = NO;
horizontalSeparator.hidden = NO;
} else {
[demandsLabelContstraint setPriority:UILayoutPriorityDefaultLow];
[horizontalSeparatorContstraint setPriority:UILayoutPriorityDefaultHigh];
horizontalSeparator.hidden = YES;
demandsRightLabel.hidden = YES;
demandsLeftLabel.hidden = YES;
}
コードから次のことがわかります。私の考えは、状況ごとに優先順位を切り替えることです。特別なリクエストテキストが利用可能な場合、優先度を設定することにより、対応するNSLayoutContraintsがトリガーされます。
自動レイアウトについての私の意図または理解は、優先順位を変更することでそれらを切り替えることができるということです。しかし、そうではないようです。
では、どうすれば問題を解決できますか。