web-dev-qa-db-ja.com

Xcode 8.現在の構成で無効になっているアイテムを参照する制約

Xcode 8に更新した後、この問題に直面しました。UIオブジェクトがメインのストーリーボードから削除されるたびに、次の警告が表示されます。

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

enter image description here

これはXcodeのバグのようですが、とにかくプロジェクトからこれらの警告を削除したいと思います。 Xcode 6 here にも同じ問題があることがわかりましたが、その質問からの回答がないため、問題は解決していません。ストーリーボードで誤った制約を見つけて削除すると、誤った制約の量が減少するのではなく増加します。私も試したこと:

  • プロジェクトをきれいにした
  • 派生データをクリーンアップ
  • すべての制約を削除し、新しい制約を最初から追加しました

何か案は?

22
Danny

Installedではないビューがいくつかありましたが、xcode 8.1に更新した後、2つの警告がありました。

次の手順は私のために働きました:

1)プロジェクトをクリーンアップしてXcodeを再起動します。警告は1に減少しました。

2)警告を選択すると、問題のある制約が正確に表示されます。開いた Attributes Inspectorおよび制約が適用されているビューを選択し、ビューで(制約ではなく)チェックされていない場合はInstalledを探します。 ビューにインストール済みを選択する、または選択解除して制約自体にインストール済み

下のスクリーンショットを参照してください。 Installedは、警告がポイントしているという制約ではなく、ビューではチェックされていませんでした:)

Installed is unchecked on a view, not on constraint itself

更新:別のViewControllerでも同じ問題が発生しました、サイズクラスのUIViewがインストールされていません。制約自体にインストール済みを選択解除し、警告も消えました。Xcodeのバグではなく、両方のUIViewでインストール済みをオン/オフにすると主張していますとConstrarint

22
AamirR

短い答え: '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が1ce-xx-Bx5であること
  • 制約は2つの要素に関連付けられています。
  • 1つはMwb-6O-DKsというIDを持っています
  • もう一方のIDはy2M-Sk-Yghです。

したがって、_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を実行中...)

11
jungledev

Report Navigator [これは左端の列の右端のタブです]。これにより、制約IDを含むビルドログが表示されます。詳細については、この stackoverflowの投稿 を参照してください。

4
Munahil

理由

インストールされていないアイテム(つまりビュー)がありますが、まだインストールされている制約がありますfattie

特定の制約を見つける方法

この警告の原因となる正確な制約を見つけるのは困難です。 BastiBenの答え 特定の制約を見つける方法を段階的に説明しました。

ソリューション

  • 特定のサイズクラスについて、インストールされていないアイテムがあるかどうか、特定の制約のアイテム/ビュー(最初と2番目)の両方を確認します。私の場合、すべてのサイズクラスに制約がインストールされましたが、「wC hR」用に1つのアイテムがインストールされました(次の画像を参照)。 enter image description here
  • 警告を解決するには、アイテムをインストールしてください。
  • 次に、アプリをビルドします。それでも特定のインターフェース/ XIBファイルに対して同じ警告が表示される場合は、今回は他の制約にも同じ問題があるので心配しないでください。

未来へのアドバイス

  • 他のインターフェイスからビューをコピーして貼り付けるときに、ビューが正しくインストールされているかどうかを確認してください。
2
Milan Kamilya

ストーリーボードソースのタグを確認して、ビューまたは制約を見つけることもできます。

  1. ソースとしてストーリーボードを開く
  2. 次のタグを探してIDを取得します
  3. ストーリーボードでIDを探し、それがどのアイテムかを見つけます。
1
Maria

アンインストールしていたので警告が出ました。ビューを再インストールした後、クリーン後でも警告は消えませんでした。しかし、Xcodeを再起動した後、警告は消えました。

1
Ben Thomas

この問題を解決するには、いくつかのオプションがあります。

最初に問題の原因は何ですか?制約をアンインストールせずにビューをアンインストールします。

第2の理由はこれですか?ビューを作成してから仕様を変更したためにビューコントローラーにビューを残しておき、その部分が含まれていない可能性があるため、ビューを一時的に削除したい場合があります。あなたの現在のスプリントまたはあなたは何を持っています

最後にどのように解決しますか?

3つのオプションがあります。

  1. ビューを再インストールできる場合

  2. ビューを保持したい場合

  3. アンインストールしたビューをまとめて削除できる場合

オプション1

ビューを再インストールできる場合:

  1. 図1に示すようにフェードアウトするビューで、図2に示すようにインストール済みオプションを切り替えてビューを再インストールします。

  2. プロジェクトをクリーンアップしてみてください(コマンド+ Shift + K)-それが機能しない場合は、xCodeを再起動してください。それでもうまくいかない場合は、どこかでアンインストールされたビューを見逃している可能性があります。

オプション2

ビューを保持する場合:

  1. フェードアウトしているビューコントローラーシステム内のすべてのビューを見つけます(つまり、アンインストールされています)。

1 enter image description here 2 enter image description here

  1. ビューに関連付けられている制約を確認する

3 enter image description here

  1. 「インストール済み」のチェックを外します

最初の図に示されているように、制約もフェードされます(制約グループではありません)。

  1. プロジェクトをクリーンアップしてみてください(コマンド+ Shift + K)-それが機能しない場合は、xCodeを再起動してください。それがうまくいかない場合は、どこかで制約を見逃している可能性があります。

オプション

アンインストールしたビューをまとめて削除できる場合

  1. アンインストールされたビューを削除すると、自動的に制約が削除されます

  2. プロジェクトをクリーンアップし(Command + Shift + K)、それが機能しない場合は、xCodeを再起動してください。

0
chris

解決策は、アンインストールされたビューを削除することでした。そのような単純な。

0
Suhaib

基本的に、「アンインストールされた」ビュー/ボタン/その他のすべての制約を「アンインストール」することを確認してください。

0
Tycho Pandelaar