1. ホーム
  2. ios

[解決済み] UIViewsを非表示にしたAutoLayout?

2022-04-24 22:58:25

質問

を表示/非表示にするのは、かなり一般的なパラダイムであるように感じます。 UIViews 最も頻繁に UILabels ビジネスロジックに依存します。私の質問は、AutoLayoutを使用して、隠されたビューのフレームが0x0であるかのように応答するための最良の方法は何かということです。以下は、1~3の機能のダイナミックリストの例です。

今現在、ボタンから最後のラベルまで上部に10pxのスペースがありますが、ラベルが隠されているときは明らかにスライドアップしません。今のところ、この制約の出口を作り、表示するラベルの数に応じて定数を変更しています。この方法は、負の定数値を使用して、非表示のフレームを越えてボタンを押し上げるので、明らかに少しハチャメチャになっています。また、実際のレイアウト要素に制約されているわけではなく、他の要素の既知の高さ/パディングに基づいてこっそり静的な計算をしているだけなので、明らかにAutoLayoutが何のために構築されたかに反していることも悪い点です。

ダイナミック・ラベルに応じて新しい制約を作成することもできますが、空白をつぶすだけなのに、細かい管理が必要で、冗長になってしまいます。もっと良い方法はないでしょうか? フレームサイズを0,0に変更し、制約を操作することなくAutoLayoutに任せますか? ビューを完全に削除する?

正直なところ、隠しビューのコンテキストから定数を変更するだけなら、簡単な計算で1行のコードで済みますが。新しい制約を constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: が重く感じられます。

2018年2月編集 : とのベンの回答を参照してください。 UIStackView s

解決方法は?

UIStackView は、おそらくiOS 9+のために行くべき方法です。隠しビューを処理するだけでなく、正しく設定されていれば追加のスペースやマージンも削除されます。