Xcode Storyboard警告:現在の構成では、アイテムを参照する制約がオフになっています。現在の構成でこの制約をオフにします


146

この警告はXcode 6.1で発生します。誰もがこの警告が何を意味し、それで何が起こるか考えていますか?どうもありがとう!

以下は、ソースコードで開かれた警告のスクリーンショットです。」

ここに画像の説明を入力してください

警告を引き起こす制約を見つける方法は?Xcodeは、どの制約が問題であるかを通知しません。

ここに画像の説明を入力してください


@wummはい、アプリを正常にビルドして実行できます。いくつかの潜在的な問題が何らかの形で発生する可能性があることを心配していますが、まだ対応していません。
Zhihao Yang 2014

7
一般に、この問題は次の原因で発生することに注意してください。インストールされていないアイテムがありますが、まだインストールされている制約があります。一般に、未インストールの項目を見つけ、そのすべての制約について、未インストールのマークを付けます。
Fattie

@Fattieこの主な理由で、承認された回答を編集してください。ありがとう
Milan Kamilya 2017年

回答:


431

この警告は煩わしい場合があり、Xcode 6.1.1以降で発生します。主な問題は、警告をクリックしても参照される制約を簡単に見つけることができないことです。これはバグであり、遅かれ早かれ修正されると思います。

ただし、当面は、この小さな回避策を使用できます。

手順1:迷惑な警告を検出する😱

迷惑な警告

手順2:警告を右クリック/ Ctrl Reveal in Logキーを押しながらクリックし、😨を選択します

ここに画像の説明を入力してください

ステップ3:次のログスニペットの美しさを賞賛します。

... snip ...
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Dlb-cb-nWC: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:6Ze-mO-v5N: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:9av-xw-u1o: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:RPt-Uf-vaZ: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:Rnc-4M-7jV: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:epJ-D9-KEF: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
/Devel/MyCrippledAppNG/MyCrippledApp/Main_iPad.storyboard:4HC-Gu-01w: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
... snip ...

うーん...これは何ですか...?

面白い

ステップ4:プロジェクトの検索バーにそれを投げ込みましょう...😐

探す

epうん、そうだね。クリックして。

ステップ5:😁OMG!Appleがこの厄介なバグを修正するまで、さらに数分の生産性をお楽しみください。😎

わーい


2016年...

  • 「ログに表示」でそれを取得できない場合は、レポートナビゲーターを表示します。(これは、左端の列の右端のタブです。)そこでビルド結果を詳しく調べます。制約IDを含むビルドログが表示されます。礼儀構築成功

ここに画像の説明を入力してください

ここに画像の説明を入力してください

  • 5/2016のXcodeの場合、面倒なことに、Xcodeを終了して再起動し、この警告をクリアする必要がある場合があります。

  • 紛らわしいことに、同じエラーが無関係な問題(Appleのバグまたはエラー言語の不適切な使用のようです)によって引き起こされる可能性があることに注意してください。IBInspectableアイテムがあり、Swiftファイルでそれらの名前変更した場合。Xcodeは古い名前のUserDefinedRuntimeAttributesを削除しませ。「Identity Inspector」(右パネルのアイテム3)をクリックして、不要なアイテムを削除するだけです。

2017年...

  • さらに別の一般的で、実際にはより単純な問題の原因。アイテムをアンインストールした場合:現時点で、Xcode はそのアイテムにつながる制約を自動的にアンインストールすることを認識していません。簡単に言えば、未インストールの項目を確認し、そのすべての制約について、未インストールのマークを付けるだけです。(または単に、おそらくそれが問題かどうかを確認するために、未インストールのアイテムを完全に一時的に削除するだけです。)

28
その説明は素晴らしかった。ありがとうございました!
トーマスマルト2015年

7
今週の私のお気に入りの答え:)そして非常に便利です。ありがとう!
15年

5
これからの答えには絵文字が必要だと思います。
James Webster

3
私の場合のように、[ログに表示]がグレー表示されている場合はどうなりますか?
バカロロ2015

6
私の右クリック- >ログが明らかに私が参照としてこれを使用して、ログを開いたように、何もしませんでした:stackoverflow.com/questions/19014359/...
terrigenus

39

このメッセージは、ストーリーボードのビューを非アクティブ化したが、そのビューに基づく制約を非アクティブ化しなかった場合にトリガーされます。

たとえば、ボタンを無効にしましたが、そのボタンにリンクされたいくつかの制約があります。これは、高さや幅などの固有の制約、または別のビューからの距離などの相対制約です。

ビューを参照する各制約をオフにする必要があり、手動でオフにする必要があります。Xcodeはここでは過度に保守的であり、あなたのためにそれをしません。


4
お返事ありがとうございます!「非アクティブなビュー」とは何か具体的に説明していただけますか?(ボタンのような)ビューを削除することですか?しかし、すでに削除したため、制約も削除されて見つからなかった可能性がありますか?そして、より詳細に「制約をオフにする」には、それを選択して削除するだけですか?どうもありがとうございました!
Zhihao Yang 2014

2
現在のサイズクラスのビューがInterface Builderで「インストール済み」としてマークされていない場合、ビューは非アクティブ化されます。
DivideByZer0

ストーリーボードに多くのViewControllerがあります。oneどのサブビューがインストールされていないかを知るにはどうすればよいですか?
jobima、2015年

警告を右クリックして、[ソースコード]オプションを選択できます。そこで、対応するビューコントローラの対応するビューの階層が明確に表示されるはずです。
ZaEeM ZaFaR 2016年

15

この解決策は私にとってはうまくいきます。

Xcode 5で開発したプロジェクトからいくつかの項目をXcode 6にコピーし、Xcode 6のストーリーボードは複数のレイアウトをサポートするため、すべての制約について、現在の構成にインストールする必要があります。

たとえば、次のように設定する必要がある制約に対して、「コンパクト幅|通常の高さ」を使用しています。

ここに画像の説明を入力してください

プロジェクトの何百もの制約をチェックして設定し、クリーンおよびビルドした後、警告は最終的に消えます。


1
Installedビューオブジェクトの属性には、厄介なチェックボックスもあることに注意してください。したがって、表示されていると思われるビューオブジェクトのチェックボックスがオンになっていることを確認してください。警告は、一部のオブジェクトがに表示されていないことを示していcurrent configurationます。
マット

これも私にとってはうまくいきました。XCodeは12または13の警告があると言ったが、そのうちの1つのログを見ると少なくとも100あることがわかりました。そのため、それぞれに目を通し、各制約にwChRを追加して、汎用の「インストール済み」のチェックを外しました。警告が消えました!
アンドレアス

ああ、言及するのを忘れました。途中で、複数の制約を同時に選択することで、一度に複数の制約に対してこのプロセスを実際に実行できることがわかりました。
Andreas

8

このエラーがどのようにして発生したかを自分のケースに追加したかっただけです。私のケースでは、「Cmd + Backspace」を含むテキストフィールドを削除したいと思いました。これは、シーンビルダーのツリービューで直接行いました。

ここに画像の説明を入力してください

スヌーズフィールドがグレー表示されていることがわかります。

それで、それは私にとって簡単に発見されました。以下を選択するだけで、フィールドを実際に削除することができます。

メニューから編集-削除

驚くべきことに、これは本当にフィールド(制約を含む)を削除します。多分これは誰かがこの迷惑な警告の原因を簡単に見つけるのに役立ちます...


これは実際には質問の答えにはなりません。別の質問がある場合は、[ 質問する]をクリックして質問できます。賞金追加して、十分な数になったらこの質問にもっと注目を集めることもできます評判を得。- 口コミより
マーティン・エヴァンス

3
これは、尋ねられた質問を修正できるもう1つの方法です。他の人を助けるためにこれを追加したかっただけです...
Dirk

ありがとう、とても役に立ちました
Ahmed Elashker 2016

これにより、問題を見つけて修正する方法が絞り込まれました。それは私のために働いた!
ランスサマリア

6

詳細な説明

他の答えに問題はありません。私は、元の警告の文言に注意を引き、これがワークフローに現れる可能性のあるいくつかのユースケースを特定したかっただけです。

制約警告

現在の構成で制約参照アイテムがオフになっています。

1つまたは複数の制約で参照されている一部のアイテム(通常は通常表示されるコントロールまたはカスタムビュー)がオフになっている(無効になっているか、チェックボックスが[インストールされている]チェックボックスがオフになっている)。たとえば、ストーリーボードのコントロールまたはビューをメインビューの外に移動したい場合(または、サイズクラスで何か面白いことをしているときに表示される場合があります)、コントロールに制約が関連付けられていると、この警告が表示される場合があります。

アンインストールされたコントロール

推奨されるソリューションに加えて:

現在の構成でこの制約をオフにします。

修正する2つのアプローチ

ドキュメントの概要

視覚的にストーリーボードでドキュメントアウトラインを開き、メインビューの外にあるコントロール/ビューを参照するグレー表示された制約を探すことができます(アウトラインを広げ、制約をクリックして、属性インスペクターを表示し、マウスを押してすばやく確認します)。 。次に、このコンテキスト(サイズクラス)から制約を削除します。たとえば、私の場合、後でどこに表示するかを決定するまでコントロールを保持しているだけなので、問題のある制約を後で完全に削除することにしました。ただし、サイズクラスでは、属性インスペクターにインストールされているチェックボックスを使用して、現在のコンテキストから制約をアンインストールします。

ログナビゲーター/検索ツール

ログナビゲーターを引き続き使用して、ストーリーボード上の各オブジェクトに与えられた一意の識別子を介して問題のコントロールを見つけることもできます。ログでは、黄色で強調表示されたテキストの直前にあり、通常は上記の例にあるような形式になります。jvj-mY-DHf

識別子を使用すると、Xcodeの検索ツールを使用して、問題のある制約を見つけて削除(完全に)またはアンインストール(現在のコンテキストの場合)できます。

ログナビゲーター

Xmlとその単純さが好きな場合は、ストーリーボードをソースコードとして開き、問題のある一意の識別子を見つけて、xmlの適切なブロックを削除することもできます。


1

これが発生する理由の1つは、制約と互換性のないサイズクラスを選択したためです(wAny hAny一般的なケースです)。このような場合は、Interface Builderで別のサイズのクラスを選択するだけで完了です。


1

私にとっては、「マージンへの制約」オプションが選択されていないオブジェクトに新しいビューを(ビューではなく)制約を設定した場合に起こります。オプションをチェックすると問題が解決します(デフォルト)。


1

私のために働いた(そして私はなぜ私には理由がわかりません)は、 "Use Trait Variations"をオフにし、次にクリーンアップを実行し、そしてそれらを再びオンにすることです。次のビルドには警告はありませんでした。

[特性のバリエーションを使用]をオフにするには、プロジェクトナビゲーターでストーリーボードを選択し、[ファイルインスペクター]を選択します。

ここに画像の説明を入力してください

次に、「特性バリエーションを使用」の選択を解除し、Shift-CMD Kを押してクリーンアップを実行します。使用する場合は、特性バリエーションをオンに戻します。

ここに画像の説明を入力してください


これ自体は「正しい」とは思わない(制約が消える)が、このスイッチをいじってから変更を最後のコミットに戻すと、Xcodeは古い/正しくないものをうまく更新するので、この回答は役に立ちました/この種の警告はすでに修正されています。Xcodeは古い、すでに修正された警告を実際に何度も表示するようです-Xcodeを再起動しても通常は役に立ちません。スイッチを切り替えて、最後のコミットに戻すと、この種の次の「実際の」警告が表示されるようです。それをクリックすると、IBで問題のある制約が自動的に選択されます。
ジョニー

0

他の答えが原因でそれは永続的な制約であると思いましたが、以前に削除したアイテムにまだ持っていた「アウトレット」が原因でした。何をすべきか:

  1. ViewControllerを選択します
  2. 右上の「アウトレット」アイコンをクリックします
  3. コンセントを調べて、不要なものを慎重に削除します

最悪のシナリオでは、すべてのアウトレットを削除して、再び接続します。ケースが解決しました!


0

@BadCatの回答説明され、よくガイドされているように、私はステップをたどり、あえて1つだけステップを踏みました。

BadCats回答の最後のステップの後に実行するステップ:

ステップ1:

Interface Builderで制約を選択し、それが何であるかを念頭に置いて削除しました。

ステップ2

XCodeプロジェクトをビルドすると、警告の数が増える可能性があることが示されます。これは、適切にコンパイルするために必要な制約を削除したためです。それでは、3番目のステップに進みます。

ステップ3

念頭に置いた制約(削除した制約)を再度追加します。そして、それを再構築します!

私にとって、これを行うだけで警告は消えました!これは一部の人にとってうまくいくと思います!

原因:

この警告の原因となった問題を理解できたため、ラベルをIBOutletに接続しましたが、その名前は大文字で始まりました。そこで、ViewControllerで単純な文字に名前を変更し、IBで変更するようになりました。過去のIBOutletを削除して、新しく名前を変更したプロパティ名に接続して接続しました。その後、新しい警告が出てくることに気づきました。

最初に私はこのスレッドでも次の答えを試しましたが、役に立ちませんでした!

乾杯!


0

私の場合はラベルを選択し、コントロール+ Xをクリックします。無効になりますが、私は何もしません。ビルドすると警告が表示されます。解決策:ラベルを削除するか、選択したコントロール+ラベルのXを削除します。


0

制約を含むこれらのUI要素をすべて削除し、もう一度追加すると、警告が消えます。とにかく、これはこれを解決するための最悪ですが便利な方法です。


0

スタックビューで問題が発生しました。制約を削除して再度追加しても効果はありませんでした。クリーニングと再構築は助けにはなりませんでした。

私にとっての解決策は、完全に新しいスタックビューオブジェクトを作成することでした。

次に、すべての要素を古いスタックビューから新しいスタックビューに移動します。

古いスタックビューを削除すると、問題が修正されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.