web-dev-qa-db-ja.com

Xcode Storyboardの警告:現在の構成で制約参照項目がオフになっています。現在の構成でこの制約をオフにします

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

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

enter image description here

警告の原因となっている制約を見つける方法は? Xcodeは、どの制約が問題であるかを教えません。

enter image description here

142
Zhihao Yang

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

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

ステップ1:迷惑な警告を検出しますか????

Annoying warning

ステップ2:警告を右クリックまたはCtrlキーを押しながらクリックし、Reveal in Log ????を選択します

enter image description here

手順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 ...

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

interesting

ステップ4:それをプロジェクト検索バーに放り込んでみましょう... ????

search

????うん、あなたは正しいと思いました。クリックして。

ステップ5:????ああ、神様! Appleがこの厄介なバグを修正するまで、数分の余分な生産性をお楽しみください。 ????

wheeee


2016年の...

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

enter image description here

enter image description here

  • 5/2016のXcodeでは、面倒なことに、restart Xcodeでこの警告をクリアする必要がある場合があります。

  • 紛らわしいことに、同じエラーは無関係の問題によって引き起こされる可能性があることに注意してください(これはAppleバグまたはエラー言語の不適切な使用のようです):IBInspectableアイテムがあり、 rename Swiftファイル内のそれら。 Xcodeは、古い名前のUserDefinedRuntimeAttributesをnot削除しません。 [IDインスペクター](右パネルのアイテム3)をクリックして、不必要なアイテムを削除します。

2017年の...

  • 問題のさらに別の一般的で実際に単純な原因。 n-Installアイテムに遭遇した場合:執筆時点では、非常に単純なXcode そのアイテムにつながる制約を自動的にアンインストールすることも知りません。簡単に言うと、未インストールのアイテムを調べ、そのすべての制約について、未インストールのマークを付けるだけです。 (または、単に、インストールされていないアイテムを一時的に完全に削除して、問題があるかどうかを確認します。)
422
BastiBen

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

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

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

39
KPM

この解決策は私にとっては有効です。

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

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

enter image description here

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

15
Zhihao Yang

このエラーがどのように発生したかを自分のケースに追加したいだけです。私の場合、「Cmd + Backspace」でテキストフィールドを削除したかったのです。 Scene-Builder Tree-Viewで直接これを行いました。

enter image description here

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

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

メニューから編集-削除

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

8
Dirk

詳細な説明

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

constraint-warning

現在の構成で制約参照項目がオフになりました。

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

uninstalled-control

推奨されるソリューションとともに:

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

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

ドキュメントの概要

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

Log Navigator/Find Tool

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

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

log-navigator

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

6
Tommie C.

私にとっては、「Constraint to margins」オプションがチェックされていない状態で、オブジェクトに(ビューではなく)オブジェクトに新しい制約を設定すると発生します。オプションをチェックすると問題が解決します(デフォルト)。

1
Ryde

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

1
Jano

私のために働いたのは(そしてなぜ理由がわからないのか)「特性のバリエーションを使用」をオフにしてから、クリーンを実行し、再びオンにすることです。次のビルドには警告がありませんでした。

[特性バリエーションを使用]をオフにするには、Project Navigatorでストーリーボードを選択し、[ファイルインスペクター]を選択します。

enter image description here

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

enter image description here

1
Scooter

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

0
Duyen Hang Kim

私はそれが他の答えのために永続的な制約だと思ったが、それは私が以前に削除したアイテムのためにまだ持っていた「アウトレット」によるものだった。すべきことは:

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

最悪のシナリオでは、すべてのコンセントを削除して、再び接続するだけです。事件解決!

0
Chuckles

@ BadCat's answer で説明され、よくガイドされているように、私はステップをたどりました。

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

ステップ1:

Interface Builderで制約を選択し、その目的を念頭に置いて削除しました。

ステップ2

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

ステップ3

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

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

原因:

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

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

乾杯!

0
Randika Vishman

スタックビューで問題が発生しました。制約を削除して再度追加しても解決しませんでした。クリーニングと再構築は役に立ちませんでした。

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

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

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

0

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

0
Old one