Comment ajouter de la Contrainte par programmation en objective-c
Je veux ajouter contrainte par programme et j'utilise code ci-dessous pour ajouter en HAUT et à GAUCHE de la contrainte.
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:label1
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTop
multiplier:1
constant:110];
NSLayoutConstraint *left = [NSLayoutConstraint constraintWithItem:label1
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1
constant:10];
lable1
est ajouté à mon avis du contrôleur. Quand j'ajoute ces deux contraintes à la vue comme
[self.view addConstraint:top];
[self.view addConstraint:left];
Il donne l'erreur dans la console et de la contrainte, n'a pas d'incidence sur l'étiquette.
2016-02-09 19:36:59.824 testinMRC[99160:313382] 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.
(
"<NSLayoutConstraint:0x7fa5c8738610 V:|-(110)-[UILabel:0x7fa5c8626940'Label'] (Names: '|':UIView:0x7fa5c86267b0 )>",
"<NSIBPrototypingLayoutConstraint:0x7fa5c8628a70 'IB auto generated at build time for view with fixed frame' V:|-(88)-[UILabel:0x7fa5c8626940'Label'] (Names: '|':UIView:0x7fa5c86267b0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fa5c8738610 V:|-(110)-[UILabel:0x7fa5c8626940'Label'] (Names: '|':UIView:0x7fa5c86267b0 )>
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.
2016-02-09 19:36:59.889 testinMRC[99160:313382] 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.
(
"<NSLayoutConstraint:0x7fa5c87334b0 H:|-(10)-[UILabel:0x7fa5c8626940'Label'] (Names: '|':UIView:0x7fa5c86267b0 )>",
"<NSIBPrototypingLayoutConstraint:0x7fa5c86285c0 'IB auto generated at build time for view with fixed frame' H:|-(188)-[UILabel:0x7fa5c8626940'Label'](LTR) (Names: '|':UIView:0x7fa5c86267b0 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7fa5c87334b0 H:|-(10)-[UILabel:0x7fa5c8626940'Label'] (Names: '|':UIView:0x7fa5c86267b0 )>
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.
Quelqu'un peut me dire pourquoi cette erreur vient-il?
Aide-moi à court de la solution
utiliser la maçonnerie d'ajouter des contraintes de la programmation.
Dernier moyen ajoutée ici: stackoverflow.com/a/51531647/4061501
Dernier moyen ajoutée ici: stackoverflow.com/a/51531647/4061501
OriginalL'auteur Crazy Developer | 2016-02-09
Vous devez vous connecter pour publier un commentaire.
Dans votre cas d'erreur indique clairement que vous avez un conflit contraintes de votre point de vue. Probablement parce que vous essayez d'ajouter des contraintes à la vue qui a déjà certains d'Interface Builder. Même si vous n'avez pas configuré de toute limite explicitement IB ne fournir pour vous quand il détecte que certains sont manquants.
Je vois dans les commentaires, vous avez mentionné que vous voulez faire, tout un programme.Dans ce cas, prendre un coup d'oeil au morceau de code:
C'est assez explicite. Comme vous pouvez le voir j'ai dû ajouter de la largeur et de la hauteur des contraintes à la vue, parce que seulement en haut et à gauche n'est pas de décrire complètement sa position.
Résultat:
Je vous encourage à essayer le Format Visuel de la Langue. Même résultat peut être obtenu avec beaucoup moins de code. Ce code entraîne le même résultat:
Laissez-moi savoir si cela a aidé. Des acclamations.
[view setTranslatesAutoresizingMaskIntoConstraints:NO];
C'est une exigence clé.OriginalL'auteur NKorotkov
Le problème n'est pas de votre code, il est l'
IB auto generated at build time for view with fixed frame
message:Interface Builder génère automatiquement des contraintes pour vous si vous n'ajoutez pas de vous-même.
Vous pourriez éviter en
Use Auto Layout
.ou
remove at build time
.Use Auto Layout
, aurait probablement énorme, balayant d'impact sur le projet, et qui exigent que les OP passer à l'ancienne "amortisseurs et ressorts" style de redimensionnement. Votre deuxième option d'ajouter le manque de contraintes et de les marquer comme "supprimer au moment de la construction" semble être une bien meilleure solution.Je veux créer une étiquette moment de l'exécution. est ce code ci-dessus est correcte lorsque l'étiquette de créé au moment de l'exécution.
OriginalL'auteur Jörn Buitink
Il semble que vous avez un conflit contraintes de mise en forme. Une contrainte a été le plus probable dans le storyboard et que vous essayez d'ajouter une contrainte par programme qui entre directement en conflit avec elle.
Il semble que vous essayez de déplacer une UIView de la route après une action se produit. I. E appuyez sur un bouton et déplacer un visage heureux d'image à partir du milieu de l'écran dans le coin supérieur gauche.
De l'ajout et de la suppression des contraintes directement dans le code peut être un mal de tête ÉNORME avec l'augmentation du code, les tests unitaires et les mises en garde de remplissage de votre console.
Il pourrait être une meilleure idée de créer la principale UIView dans le storyboard et les ont cachés de l'espace réservé UIView qui détient toutes les contraintes que vous voulez le UIView après que vous appuyez sur le bouton. Ensuite vous pourrez changer toutes les contraintes par programme pour ceux UIViews. Donc, la vue que vous souhaitez modifier aurez la position, la largeur et la hauteur de l'espace réservé et la place de titulaire de la position et de la hauteur de la vue que vous souhaitez modifier.
De cette façon, vous n'aurez jamais cette erreur lors de la modification de la disposition des contraintes par programme parce que toute erreur sera détectée par le storyboard.
Il y a quelques open source qui fait cela pour vous en une ou deux lignes de code. (Il y a quelques youtube des tutoriels vidéo dans les docs trop) https://cocoapods.org/pods/SBP
Après l'installation de la cocoapod, votre code devrait ressembler à quelque chose comme ceci
ce code sera à l'intérieur de la vue-contrôleur avec le UIView vous souhaitez modifier et l'espace réservé UIView
OriginalL'auteur Arjay Waran