149 votes

Incapable de satisfaire simultanément les contraintes, va tenter de récupérer par la rupture de contrainte

Ci-dessous le message d'erreur que je reçois dans le debug de la zone. Il fonctionne très bien et rien n'est mal, sauf que je reçois cette erreur. Serait-il empêcher apple d'accepter l'application? Comment puis-je résoudre ce problème?

2012-07-26 01:58:18.621 Rolo[33597:11303] 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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
    "<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
    "<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
    "<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
    "<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
    "<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
    "<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
    "<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

110voto

David Wong Points 5773

Le problème que vous rencontrez est la NSAutoresizingMaskLayoutConstraints ne devrait pas être là. C'est l'ancien système de ressorts et de jambes de force. Pour se débarrasser d'elle, exécuter cette méthode sur chaque point de vue que vous êtes désireux de contrainte:

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

29voto

pedrouan Points 256

Attention, que vous n'utilisez pas plus d'une contrainte dans la même direction et de même type.

Par exemple: Vertical contrainte pour la fuite d' = 15 et un autre est >= 10.

Parfois, Xcode crée certaines contraintes vous ne le remarquez pas. Vous devez vous débarrasser de contraintes redondantes et le journal d'avertissement va sûrement disparaître.

enter image description here

De plus, vous pouvez lire et de détecter certaines raisons, directement à partir du journal:

NSLayoutConstraint:0xa338390 V:|-(15)-[UILabel:0xa331260] (les Noms de: '|':UILabel:0xa330270 )>

Ce que nous pouvons lire comme problème dans UILabel contrainte, il est à la tête verticale contrainte par 15 pt de long.

NSLayoutConstraint:0x859ab20 H:-(13)-|[UIView:0x85a8fb0]...

Ce serait de fuite horizontale contrainte etc.

6voto

C James Points 616

J'ai eu un certain nombre de ces exceptions levées, la manière la plus rapide et la plus simple que j'ai trouvée pour résoudre était de trouver des valeurs uniques dans les exceptions que j'ai ensuite cherché dans le storyboard du code source. Cela m'a aidé à trouver la véritable vue(s) contrainte(s) à l'origine du problème (je significatif userLabels sur tous les points de vue, ce qui le rend beaucoup plus facile pour suivre les contraintes et les points de vue)...

Ainsi, avec les exceptions ci-dessus, je voudrais ouvrir la table de montage séquentiel "code source" dans xcode (ou un autre éditeur) et de regarder pour quelque chose que je peux trouver...

<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]> 

.. cela ressemble à une verticale (V) la contrainte sur un UILabel avec une valeur de (17).

En regardant à travers les exceptions, je trouve aussi

<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>

Qui ressemble à la UILabel(0x72bf7c0) est proche d'un UIButton(0x886efe0) avec un certain espacement vertical (8)..

Qui sera, je l'espère assez pour moi de trouver les vues spécifiques dans le storyboard du code source (probablement par une recherche dans le texte "17" au départ), ou au moins quelques-uns des candidats probables. À partir de là je devrais être en mesure de déterminer lequel de ces vues sont dans la table de montage séquentiel, ce qui va rendre beaucoup plus facile à identifier le problème (cherchez "dupliqué" l'épinglage ou association qui est en conflit avec les contraintes de taille).

5voto

Stéphane Bruckert Points 6124

J'ai eu ce problème parce que mes .xib fichiers ont été en utilisant la mise en page automatique.

Dans l'inspecteur de fichiers, le premier onglet. Décochant la case "Utiliser la mise en forme automatique" a résolu le problème.

autolayout file inspector

5voto

royemi Points 13

Voici mon expérience et la Solution. Je n'ai pas touché code

  1. Sélectionnez affichage (UILabel, UIImage etc)
  2. Éditeur > Broches > (Select...) à Superview
  3. Éditeur > Résoudre Mise En Page Automatique Questions > Ajouter Manquant Contraintes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X