web-dev-qa-db-ja.com

Xcodeのデバッグコンソール出力の自動レイアウト制約エラーメッセージを無効にする

自動レイアウトエラー/警告メッセージを(一時的に)無効にする方法はありますか?

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>",
    "<NSLayoutConstraint:0x170098600 UIView:0x15c6294f0.leading == UIView:0x15c628d40.leadingMargin - 8>",
    "<NSLayoutConstraint:0x170098650 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62b750]>",
    "<NSLayoutConstraint:0x1700986a0 UIView:0x15c62b750.width == UIView:0x15c6294f0.width>",
    "<NSLayoutConstraint:0x1700986f0 UIView:0x15c628d40.trailingMargin == UIView:0x15c62b750.trailing - 8>",
    "<NSLayoutConstraint:0x170098880 H:[UIView:0x15c6294f0]-(0)-[UIView:0x15c62c100]>",
    "<NSLayoutConstraint:0x1700988d0 UIView:0x15c628d40.centerX == UIView:0x15c62c100.centerX + 1>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
62

いくつかの逆コンパイルを行いましたが、実際には方法があります:

for Swift 3

 UserDefaults.standard.setValue(false, forKey: "_UIConstraintBasedLayoutLogUnsatisfiable")

Objective-C

[[NSUserDefaults standardUserDefaults] setValue:@(NO) forKey:@"_UIConstraintBasedLayoutLogUnsatisfiable"];

これで、「_ UIConstraintBasedLayoutLogUnsatisfiableがOFF」という通知のみを受け取ります。

これを読んでいるすべての人に必須のリマインダー:これは最後の手段である必要があります。デバッグおよび制約の問題の修正に関するヒントについては、WWDCの「ミステリーオブオートレイアウト」セッションを参照してください: part 1 および part 2

160

Swift 3.0ソリューション:

//Hide Autolayout Warning
UserDefaults.standard.setValue(false, forKey:"_UIConstraintBasedLayoutLogUnsatisfiable")
14
Sourabh Sharma

appKit/CocoaでこのmacOS/osxを実行する方法を知りたい人向け

UserDefaults.standard.set(false, forKey: "NSConstraintBasedLayoutLogUnsatisfiable")
UserDefaults.standard.set(false, forKey: "__NSConstraintBasedLayoutLogUnsatisfiable")
5

私はlldbを使用してこれを解決しようとしましたが、解決策を見つけました:

  1. モジュールUIKitでSymbol UIViewAlertForUnsatisfiableConstraintsのシンボリックブレークポイントを作成します。
  2. ブレークポイントアクションとして、デバッガーコマンド「thread return」を追加します。
  3. 2番目のデバッガーコマンド「c」を追加します。
  4. 「アクションの評価後に自動的に続行する」を無効にします

アプリでレイアウトの問題が発生した場合、実行は一時停止されます。 「スレッドリターン」命令を使用すると、エラーメッセージをコンソールに出力する前に、エラーを出力するUIViewAlertForUnsatisfiableConstraints関数が強制的に返されます。

「c」コマンドを使用すると、アプリの実行が継続されます(注:この場合、「アクションの評価後に自動的に継続する」は何らかの形で機能しません)

ただし、これらの自動アクションを使用すると、ブレークポイントが連続して2回ヒットした場合にアプリがクラッシュする可能性があるため、ブレークポイントの動作がおかしくなります。これを解決するには、デバッガーがプログラムの実行を一時停止したときにブレークポイントアクションを削除し、コマンドを手動で入力します。

3
Palle