web-dev-qa-db-fra.com

Désactiver les messages d'erreur de contrainte de mise en page automatique dans la sortie de la console de débogage dans Xcode

Existe-t-il un moyen de désactiver (temporairement) les messages d'erreur/d'avertissement de mise en page automatique:

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
Markus Rautopuro

A décompilé et il y a en fait un moyen:

pour Swift 3

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

Objectif c

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

Maintenant, vous ne serez informé que "_UIConstraintBasedLayoutLogUnsatisfiable est désactivé".

Rappel obligatoire pour tous ceux qui lisent ceci: ceci devrait être le dernier recours, pour des conseils sur le débogage et la résolution des problèmes de contraintes, voir les sessions "Mystères de la mise en page automatique" de la WWDC: partie 1 et partie 2 .

160
Witold Skibniewski

Solution Swift 3.0:

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

pour tous ceux qui se demandent comment faire ce macOS/osx avec AppKit/Cocoa

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

J'ai essayé de résoudre ce problème en utilisant lldb et j'ai trouvé une solution:

  1. Créez un point d'arrêt symbolique pour le symbole UIViewAlertForUnsatisfiableConstraints dans le module UIKit.
  2. En tant qu'action de point d'arrêt, ajoutez la commande de débogage "retour de thread"
  3. Ajoutez une deuxième commande de débogage: "c"
  4. Désactivez "Continuer automatiquement après l'évaluation des actions"

Si votre application rencontre un problème de mise en page, l'exécution est suspendue. Avec l'instruction "thread return", la fonction UIViewAlertForUnsatisfiableConstraints qui imprime l'erreur est forcée de revenir avant que le message d'avertissement ne soit imprimé dans la console.

Avec la commande "c", l'exécution de votre application se poursuit (Remarque: "Continuer automatiquement après l'évaluation des actions" ne fonctionne pas dans ce cas)

Cependant, avec ces actions automatiques, le point d'arrêt est susceptible de se comporter étrangement s'il est touché deux fois de suite, ce qui entraînera le blocage de votre application. Pour résoudre ce problème, vous pouvez supprimer les actions de point d'arrêt et entrer les commandes manuellement lorsque le débogueur suspend l'exécution du programme.

3
Palle