指定した制約が無効になる場合があります。例えば、ノード
A
がノード B
の左側になる必要があるという制約を追加しているが、 A
をグラフから削除した場合、この制約は無効になります。
この制約は、他のどの制約とも競合しない場合でも、意味をなさなくなります。
レイアウト・インスタンスは、メモリーの浪費であるため、無効な制約をときどき自動的に削除します。
レイアウト時に検証検査が実行されます。
通常、検証検査を強制する必要はありませんが、強制する場合は以下を呼び出します。layout.validateConstraints();
これにより、すべての無効な制約が階層型レイアウトから削除されて、メモリーがクリーンアップされます。制約の検証は競合する制約を検査しません。検証の主効果は、制約システムの以降のメモリー使用量を低減することです。
メモ
制約は意味を持つ場合は有効です。2
つの有効な制約は、システムがそれらを同時に満たすことができない場合は競合しています。
無効な制約は意味を持たないため、競合することはありません。
そのため、制約の検証と制約の解決は別個のフェーズです。
制約の検証は迅速なローカル・テストを実行します。
これは無効な制約をレイアウト・インスタンスから完全に削除します。
競合する制約には影響しません。
制約の解決は、一連の有効な制約が互いに競合しているかどうかを検査します。
そのため、制約の解決は、複数の関連制約ネットワークでは複雑なプロセスになります。
制約の解決は、解決できる制約と解決できない制約を判別します。
しかし、制約の解決によって、競合する制約がレイアウト・インスタンスから削除されることはありません。
この解決は、一部の制約を無視できるソリューションを提供します。