web-dev-qa-db-ja.com

iOSのUIStackviewでサブビューを非表示にする

UIStackViewのサブビューを非表示にするには、isHiddenをtrueに設定するか、removeArrangedSubviewを使用して親ビューからサブビューを削除することをお勧めしますStackview

Stackviewを使用して、UIElementをtableViewセルに配置しています。現在、親StackViewと子StackViewが内部に配置されています。子ビューは、条件に基づいて表示または非表示にする必要があります。条件がtrueになったときに、子ビューのisHiddenプロパティをtrueに設定しています。

スクロールして新しいセルが表示されるようになると、コンソールに次のメッセージが表示されます。アプリはクラッシュしません。

NSLayoutConstraint:0x600000093470 'UISV-canvas-connection' UIStackView:0x7fd4527201b0.top == UILabel:0x7fd452720370'Day Off-Rest and Sleep ... '。top(アクティブ)

UIViewAlertForUnsatisfiableConstraintsにシンボリックブレークポイントを作成して、デバッガーでこれをキャッチします。 <UIKit/UIView.h>にリストされているUIViewのUIConstraintBasedLayoutDebuggingカテゴリのメソッドも役立つ場合があります。 [LayoutConstraints]制約を同時に満たすことができません。おそらく、次のリストの少なくとも1つの制約は、望ましくないものです。
これを試して:

  1. 各制約を見て、予期しないものを見つけ出してください。
  2. 不要な制約を追加したコードを見つけて修正します。 ( ""、 ""、 ""、 ""、 ""、 ""、 "")

制約を破って回復しようとします

14
jay

最初の質問に答えるために、サブビューを再表示する必要がない場合、最も論理的なことは、removeArrangedSubview(UIView)を使用してそれを削除することです。ご存知かもしれませんが、スタックビューは、ビューが追加、削除、挿入、または非表示/再表示されるたびに、そのレイアウトを自動的に更新します。

制約についてコンソールに表示される警告は、現在サブビューに実装したものに関連する場合と関連しない場合があります。あなたはそれが関連しているかもしれないと思ったのでそれを言及しましたか?

お役に立てば幸いです。

15
Jim