Vous trouverez ci-dessous le message d'erreur que je reçois dans la zone de débogage. Cela fonctionne bien et rien ne va pas sauf que je reçois cette erreur. Cela empêcherait-il Apple d'accepter l'application? Comment je le répare?
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.
ios
objective-c
debugging
nslayoutconstraint
Johnny Cox
la source
la source
Réponses:
Je recommanderais de déboguer et de trouver quelle contrainte est "celle que vous ne voulez pas" . Supposons que vous ayez le problème suivant:
Le problème est toujours de savoir comment trouver les contraintes et vues suivantes.
Il existe deux solutions pour y parvenir:
Puisque vous savez où trouver les contraintes inattendues (PBOUserWorkDayHeaderView), il existe un moyen de le faire assez bien. Permet de trouver
UIView
etNSLayoutConstraint
dans les rectangles rouges. Puisque nous connaissons leur identifiant en mémoire, c'est assez facile.Comme vous pouvez le voir, les pointeurs de mémoire sont les mêmes. Nous savons donc ce qui se passe actuellement. De plus, vous pouvez trouver
NSLayoutConstraint
dans la hiérarchie des vues. Puisqu'il est sélectionné dans la vue, il est également sélectionné dans le navigateur.Si vous en avez besoin, vous pouvez également l'imprimer sur la console à l'aide du pointeur d'adresse:
Vous pouvez faire la même chose pour chaque contrainte que le débogueur vous indiquera :-) Maintenant, vous décidez quoi faire avec cela.
IMPRIMEZ-LE MIEUX (je recommande vraiment cette façon, c'est de Xcode 7)
NSLayoutConstraint
:SWIFT :
OBJECTIF C
id
vous pouvez simplement appuyer dessus dans votre Find Navigator :COMMENT RÉPARER SIMPLEMENT CE CAS?
999
des contraintes cassée.la source
Le problème que vous rencontrez est que NSAutoresizingMaskLayoutConstraints ne devrait pas y figurer. C'est l'ancien système de ressorts et entretoises. Pour vous en débarrasser, exécutez cette méthode sur chaque vue que vous souhaitez contraindre:
la source
Veillez à ne pas utiliser plus d'une contrainte dans la même direction et le même type.
Par exemple: Contrainte verticale pour fin = 15 et une autre est> = 10.
Parfois, Xcode crée des contraintes que vous ne remarquez pas . Vous devez vous débarrasser des contraintes redondantes et l'avertissement de journal disparaîtra sûrement.
De plus, vous pouvez lire et détecter certaines raisons, directement à partir du journal :
Nous pouvons lire cela comme un problème dans la contrainte UILabel, c'est une contrainte verticale de 15pt de long.
Ce serait une contrainte horizontale de fin, etc.
la source
J'ai eu un certain nombre de ces exceptions lancées, le moyen le plus rapide et le plus simple que j'ai trouvé pour les résoudre était de trouver des valeurs uniques dans les exceptions que j'ai ensuite recherchées dans le code source du storyboard. Cela m'a aidé à trouver la ou les vues et les contraintes réelles à l'origine du problème (j'utilise des userLabels significatifs sur toutes les vues, ce qui facilite le suivi des contraintes et des vues) ...
Donc, en utilisant les exceptions ci-dessus, j'ouvrirais le storyboard en tant que "code source" dans xcode (ou un autre éditeur) et chercherais quelque chose que je peux trouver ...
.. cela ressemble à une contrainte verticale (V) sur un UILabel avec une valeur de (17).
En regardant à travers les exceptions, je trouve aussi
Ce qui ressemble à l'UILabel (0x72bf7c0) est proche d'un UIButton (0x886efe0) avec un espacement vertical (8).
J'espère que cela me suffira pour trouver les vues spécifiques dans le code source du storyboard (probablement en recherchant dans le texte "17" au départ), ou au moins quelques candidats probables. À partir de là, je devrais être en mesure de déterminer quelles vues se trouvent dans le storyboard, ce qui facilitera grandement l'identification du problème (recherchez les épinglages "dupliqués" ou en conflit avec les contraintes de taille).
la source
J'ai eu du mal à comprendre quelles contraintes causaient cette erreur. Voici une façon plus simple de le faire.
J'utilise Xcode 6.1.1
la source
J'ai eu ce problème car mes
.xib
fichiers utilisaient la mise en page automatique.Dans l'inspecteur de fichiers, premier onglet. Le fait de décocher "Utiliser la mise en page automatique" a résolu le problème.
la source
UIImageView
a donc changé. Vous devez redéfinir cette position, soit par programme, soit via le générateur d'interface.Voici mon expérience et ma solution. Je n'ai pas touché au code
la source
utilisez ce code rapide
la source
J'ai suivi les questions et réponses SO de chaque requête de recherche. Mais ils sont tous liés à un spécifique.
À la base, je veux dire avant que vous n'écriviez un format (peut-être simple), cela vous donnera des avertissements.
Depuis iOS 8.0, les vues par défaut sont des classes de taille. Même si vous désactivez les classes de taille, il contiendra toujours des contraintes de mise en page automatique.
Donc, si vous prévoyez de définir des contraintes via du code à l'aide de VFL. Ensuite, vous devez vous en occuper d'une ligne ci-dessous.
J'ai beaucoup cherché dans SO, mais la solution résidait dans l' exemple de code Apple .
Vous devez donc supprimer les contraintes par défaut avant de prévoir d'en ajouter une nouvelle.
la source
Pour moi, la raison principale de ce problème était que j'avais oublié de décocher
AutoLayout
dans l'Xib
éditeur. En fait, j'ai fait beaucoup d'ajustementsXIB
dans le code.la source
Cela m'a aidé à saisir la vue à l'origine du problème.
la source
Aucune des réponses ci-dessus n'est utile dans ma situation. J'utilise XCode 10.1 et teste mon application sur le simulateur pour un "iPad (5e génération)". Le simulateur exécute iOS 12.1.
J'ai une vue racine simple dans mon storyboard, avec deux sous-vues UITextField. Il n'y a aucune contrainte utilisée dans le storyboard. Et je n'ai pas d'objets UIButtonBarView dans l'application ou le storyboard.
Aucun message n'est imprimé lorsque l'application se lance et affiche la vue racine. Aucun lorsque l'appareil simulé est tourné.
Mais dans le simulateur, au moment où je clique sur l'un des champs de texte, l'extension du clavier apparaît du bas de l'écran, mais pas le clavier complet, qui ne semble jamais apparaître dans le simulateur. Mais ce qui suit est imprimé sur le terminal:
Il me semble certainement que tout cela n'a à voir avec rien dans mon application, et tout à voir avec la façon dont Apple crée sa propre vue clavier, même avec ma petite extension déclarée être combinée avec elle.
Donc, la question demeure, y a-t-il quelque chose que je suis responsable de faire en tant que développeur d'applications (sur la présomption que c'est un tas de choses qui méritent d'être examinées) ou est-ce juste le propre problème / bogue d'Apple?
FWIW, ce message de problème de contrainte ne se produit pas lors de la simulation d'un modèle d'iPad plus récent, tel que l'iPad Pro 12,9 pouces (3e génération). Mais le message apparaît lors de la simulation d'un iPad Pro 9,7 pouces ". Tous prétendent utiliser iOS 12.1.
la source
J'obtiens la même erreur, mais uniquement sur une vue spécifique, lorsque je touche le premier champ de texte, puis le champ de texte suivant vers le bas.
J'écris dans SwiftUI pour iOS 13.4
la source
J'avais également le même problème de rupture de contraintes dans le journal, pour un viewCircle dans le xib. J'ai presque essayé tout ce qui est énuméré ci-dessus et rien ne fonctionnait pour moi. Ensuite, j'ai essayé de changer la priorité de la contrainte de hauteur qui cassait dans le journal (confirmée en ajoutant un identifiant pour les contraintes sur le xib) entrez la description de l'image ici
la source
Une chose à surveiller (au moins cela m'a fait trébucher) était que je supprimais la contrainte de la mauvaise vue. La contrainte que j'essayais de supprimer n'était pas une contrainte enfant de ma vue, alors quand je l'ai fait
il ne supprimait rien parce que j'avais besoin d'appeler
puisque la contrainte était techniquement la contrainte fraternelle de mon point de vue.
la source
rapide 4
J'ajoute simplement cette ligne dans viewDidLoad et fonctionne bien avec moi.
la source