Xcode 8に更新した後、この問題に直面しました。UIオブジェクトがメインのストーリーボードから削除されるたびに、次の警告が表示されます。
現在の構成では、制約参照アイテムがオフになっています。現在の構成でこの制約をオフにします。
これはXcodeのバグのようですが、とにかくプロジェクトからこれらの警告を削除したいと思います。 Xcode 6 here にも同じ問題があることがわかりましたが、その質問からの回答がないため、問題は解決していません。ストーリーボードで誤った制約を見つけて削除すると、誤った制約の量が減少するのではなく増加します。私も試したこと:
何か案は?
Installed
ではないビューがいくつかありましたが、xcode 8.1に更新した後、2つの警告がありました。
次の手順は私のために働きました:
1)プロジェクトをクリーンアップしてXcodeを再起動します。警告は1に減少しました。
2)警告を選択すると、問題のある制約が正確に表示されます。開いた Attributes Inspector
および制約が適用されているビューを選択し、ビューで(制約ではなく)チェックされていない場合はInstalled
を探します。 ビューにインストール済みを選択する、または選択解除して制約自体にインストール済み。
下のスクリーンショットを参照してください。 Installed
は、警告がポイントしているという制約ではなく、ビューではチェックされていませんでした:)
更新:別のViewControllerでも同じ問題が発生しました、サイズクラスのUIViewがインストールされていません。制約自体にインストール済みを選択解除し、警告も消えました。Xcodeのバグではなく、両方のUIViewでインストール済みをオン/オフにすると主張していますとConstrarint
短い答え: 'id = "theIdFromWarning"を検索して、警告の各IDについてストーリーボードのソースコードを調べます。 IDは制約用です。制約IDを見つけると、2つの要素IDを参照します。 「id = "theIdForElement」を検索して要素を検索すると、その要素のソースコードで名前または情報の一部が見つかります。あなたが見ている要素を調べます。次に、ストーリーボードをソースコードからインターフェイスビルダーに切り替えて、2つの要素を見つけ、関連する制約がインストールされているが、要素がインストールされていないサイズクラスを確認します。例:ViewA.rightは水平方向にViewB.leftに制約され、すべてのサイズのクラスにインストールされますが、ViewAはheight = Regularサイズのクラスにのみインストールされます。解決策:すべてのサイズクラスにViewAをインストールするか、すべてのサイズクラスの制約をアンインストールして、height = Regularサイズクラスのみに制約を追加します。
より長い答え、段階的:
これらの警告が参照している制約/要素を簡単に確認できませんでした。私にとっては、警告を右クリックして「ログに表示」を選択することができました。これにより、次のスタイル形式で10件の警告が明らかになりました。
_/my/filepath/to/storyboard:1xe-xx-Bx5: warning: Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
_
ログにこのような詳細な説明が表示されない場合は、_Constraint referencing items turned off in current configuration. Turn off this constraint in the current configuration.
_警告へのログ参照を右クリックして_Expand all transcripts
_を選択し、ログファイルで制約の説明を検索します。
そこで、ストーリーボードを開き、プロジェクトナビゲーターでストーリーボードファイルを右クリックして、リストされたIDですべての制約を検索する「ソースコードとして表示」を選択しました(上記の例では、id:1xe- xx-Bx5)、それへの1つの参照が見つかりました:
_<constraint firstItem="Mwb-6O-DKs" firstAttribute="top" secondItem="y2M-Sk-Ygh" secondAttribute="bottom" constant="19" id="1ce-xx-Bx5"/>
_
これが私に言うことは:
したがって、_id="Mwb-6O-DKs"
_を検索することにより、IDで最初の要素のソースコードを検索し、これを見つけました。
<label ...(truncating for readability sake)...text="Build Label"...(truncating for readability sake)...id="Mwb-6O-DKs">
これは、最初の要素が「ビルドラベル」というタイトルのUILabel
であることを示しています。
Idで2番目の要素を検索すると、_id="y2M-Sk-Ygh"
_が明らかになります。
<viewController storyboardIdentifier="login"...(truncating for readability sake)...<layoutGuides><viewControllerLayoutGuide type="top" id="y2M-Sk-Ygh"/>
したがって、これは、「Build Label」というテキストを含むUILabel
には、無効になっている上部の制約があることを意味します。 (viewControllerLayoutGuide
制約は決してオフにしてはならないため、UILabel
でなければなりません。
見よ、それはインストールされなかった。 UILabelのInstalled
チェックボックスを選択したところ、エラーが消えました。
あと1つ、あと9つ! (Xcodeを実行中...)
Report Navigator
[これは左端の列の右端のタブです]。これにより、制約IDを含むビルドログが表示されます。詳細については、この stackoverflowの投稿 を参照してください。
理由
インストールされていないアイテム(つまりビュー)がありますが、まだインストールされている制約があります( fattie )
特定の制約を見つける方法
この警告の原因となる正確な制約を見つけるのは困難です。 BastiBenの答え 特定の制約を見つける方法を段階的に説明しました。
ソリューション
未来へのアドバイス
ストーリーボードソースのタグを確認して、ビューまたは制約を見つけることもできます。
アンインストールしていたので警告が出ました。ビューを再インストールした後、クリーン後でも警告は消えませんでした。しかし、Xcodeを再起動した後、警告は消えました。
この問題を解決するには、いくつかのオプションがあります。
最初に問題の原因は何ですか?制約をアンインストールせずにビューをアンインストールします。
第2の理由はこれですか?ビューを作成してから仕様を変更したためにビューコントローラーにビューを残しておき、その部分が含まれていない可能性があるため、ビューを一時的に削除したい場合があります。あなたの現在のスプリントまたはあなたは何を持っています
最後にどのように解決しますか?
3つのオプションがあります。
ビューを再インストールできる場合
ビューを保持したい場合
アンインストールしたビューをまとめて削除できる場合
オプション1
ビューを再インストールできる場合:
図1に示すようにフェードアウトするビューで、図2に示すようにインストール済みオプションを切り替えてビューを再インストールします。
プロジェクトをクリーンアップしてみてください(コマンド+ Shift + K)-それが機能しない場合は、xCodeを再起動してください。それでもうまくいかない場合は、どこかでアンインストールされたビューを見逃している可能性があります。
オプション2
ビューを保持する場合:
最初の図に示されているように、制約もフェードされます(制約グループではありません)。
オプション
アンインストールしたビューをまとめて削除できる場合
アンインストールされたビューを削除すると、自動的に制約が削除されます
プロジェクトをクリーンアップし(Command + Shift + K)、それが機能しない場合は、xCodeを再起動してください。
解決策は、アンインストールされたビューを削除することでした。そのような単純な。
基本的に、「アンインストールされた」ビュー/ボタン/その他のすべての制約を「アンインストール」することを確認してください。