ビジネスロジックによってはUIViews
、ほとんどの場合UILabels
、を表示/非表示にするのはかなり一般的なパラダイムだと思います。私の質問は、フレームが0x0であるかのように、オートレイアウトを使用して非表示のビューに応答する最良の方法は何ですか?これは、1〜3個の機能の動的リストの例です。
現在、ボタンから最後のラベルまでの上部に10pxのスペースがあります。ラベルが非表示の場合は、上にスライドしません。今のところ、この制約へのアウトレットを作成し、表示しているラベルの数に応じて定数を変更しています。非表示のフレームの上にボタンを押し上げるために負の定数値を使用しているので、これは明らかに少しハックです。また、実際のレイアウト要素に制約されず、他の要素の既知の高さ/パディングに基づいた静的な計算をこっそりと行い、オートレイアウトが何のために構築されたかと明らかに戦うため、それも悪いことです。
動的ラベルに応じて新しい制約を作成することもできますが、これは、いくつかの空白を折りたたみようとするための多くの細かい管理と冗長性です。より良いアプローチはありますか?フレームサイズ0、0を変更し、オートレイアウトに制約を操作せずに機能させるには?ビューを完全に削除しますか?
正直なところ、非表示ビューのコンテキストから定数を変更するだけでは、簡単な計算で1行のコードが必要になります。を使用して新しい制約を再作成すること constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
は非常に重いようです。
2018年2月を編集:UIStackView
sでベンの答えを見る