Comment puis-je modifier les contraintes de priorité au moment de l'exécution
J'ai une vue qui a dynamique de la hauteur et je suis en train de changer ce point de vue en hauteur de priorité dans l'exécution.
Voici ma partie de code;
if (index == 0) {
surveyViewHeightConstraint.constant = 0;
surveyViewHeightConstraint.priority = 1000;
} else if (index == 1) {
surveyViewHeightConstraint.constant = 163;
surveyViewHeightConstraint.priority = 500;
}
Je suis l'évolution de l'indice avec un bouton d'action. Lorsque j'exécute ce code, j'obtiens cette erreur:
*** Assertion failure in -[NSLayoutConstraint setPriority:], /SourceCache/Foundation/Foundation-1141.1/Layout.subproj/NSLayoutConstraint.m:174
Quelle est mon erreur ici?
Vous devez vous connecter pour publier un commentaire.
Comme indiqué dans
NSLayoutConstraint
de la classe de référence:Utilisation priorité 999 au lieu de 1000. Il ne sera pas absolument nécessaire techniquement parlant, mais ça va être une priorité plus élevée que toute autre chose.
required
àdefaultLow
et cela a fonctionné. Le même code utilisé crash sur iOS 12.Je veux faire un petit ajout à la réponse de Cyrille.
Si vous êtes à la création de la contrainte dans le code, assurez-vous de définir ses priorités avant de le rendre actif. Par exemple:
Cela aurait pour conséquence exception d'exécution.
Bon ordre est:
La façon dont nous avons géré ce est en ne changeant pas la contrainte constante, tout la priorité. Par exemple, dans votre situation, deux contraintes de hauteur.
si vous souhaitez masquer la vue, vous:
de même, si vous souhaitez montrer le point de vue:
Swift version:
J'espère que ce scénario aider quelqu'un:
J'ai eu deux contraintes, qu'elles étaient opposées les unes aux autres, je veux dire qu'ils ne pouvaient pas être satisfaits dans le même temps, dans interface builder un d'eux avait 1000 priorité et d'autres ont eu moins de 1000 priorité. quand j'ai changé dans le code, j'ai eu cette erreur:
Résiliation d'application en raison de uncaught exception 'NSInternalInconsistencyException', la raison: 'la Mutation d'un ordre de priorité à partir nécessaire à pas sur un installé contrainte (ou vice-versa) n'est pas pris en charge. Vous avez passé la priorité 250 existantes et la priorité était de 1000.'
puis j'ai initialisé dans viewDidLoad fonction avec .defaultHigh et .defaultLow valeurs et cela a réglé mon problème.
Selon
NSLayoutConstraints class
à l'intérieur deUIKit Module
Exemple:-
UIButton
contraintes avec différentes priorités -viewDidLayoutSubviews
. Cette méthode peut être appelée plusieurs fois, ce qui peut faire planter votre application si vous créez des doublons de contraintes là.Maintenant , vous pouvez, il suffit de prendre le IBOutlet de connexion de vos contraintes , puis utiliser ce code .