1. ホーム
  2. ios

[解決済み] 実行時に制約の優先順位を変更する方法

2023-02-11 23:14:03

質問

私は動的な高さを持つビューを持っており、私は実行時にこのビューの高さの優先順位を変更しようとしています。

以下は、私のコードの一部です。

if (index == 0) {

    surveyViewHeightConstraint.constant = 0;
    surveyViewHeightConstraint.priority = 1000;

} else if (index == 1) {

    surveyViewHeightConstraint.constant = 163;
    surveyViewHeightConstraint.priority = 500;

}

ボタンアクションでインデックスを変更しているのですが、このコードを実行すると、以下のようなエラーが発生します。

*** Assertion failure in -[NSLayoutConstraint setPriority:], /SourceCache/Foundation/Foundation-1141.1/Layout.subproj/NSLayoutConstraint.m:174

ここでの私の間違いは何でしょうか?

どのように解決するのですか?

で述べたように NSLayoutConstraint クラスリファレンス :

優先度は、non-requiredからrequiredへ、またはrequiredからnon-requiredへ変更することができません。の優先順位が変更された場合、例外が発生します。 NSLayoutPriorityRequired の場合、例外が発生します。 UILayoutPriorityRequired が低い優先度に変更された場合、または制約がビューに追加された後に低い優先度が必要な優先度に変更された場合。あるオプションの優先度から別のオプションの優先度への変更は、制約がビューにインストールされた後でも許可されます。

1000の代わりに優先度999を使用します。技術的に言えば絶対に必要というわけではありませんが、他の何よりも高い優先順位になります。