2017-08-09 2 views
0

Je suis en train d'apprendre Swift avec le tutoriel Start Developing iOS Apps (Swift). Je crée ce contrôle personnalisé de notation, mais chaque fois que je lance l'application est envoie que vous avez choisi Erreur:XCode Swift: Pourquoi brise-t-il mes contraintes?

2017-08-09 15:49:41.894597+0200 FoodTracker[5051:2273797] [LayoutConstraints] 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:0x17409af90 UIButton:0x100c12d90.width == 44 (active)>", 
    "<NSLayoutConstraint:0x17009c160 'UISV-canvas-connection' FoodTracker.RatingControl:0x100c02400.leading == UIButton:0x100c12d90.leading (active)>", 
    "<NSLayoutConstraint:0x17009c200 'UISV-canvas-connection' H:[UIButton:0x100c12d90]-(0)-| (active, names: '|':FoodTracker.RatingControl:0x100c02400)>", 
    "<NSLayoutConstraint:0x17009bee0 'UIView-Encapsulated-Layout-Width' FoodTracker.RatingControl:0x100c02400.width == 343 (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x17409af90 UIButton:0x100c12d90.width == 44 (active)> 

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. 
2017-08-09 15:49:41.895770+0200 FoodTracker[5051:2273797] [LayoutConstraints] 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:0x17409af40 UIButton:0x100c12d90.height == 44 (active)>", 
    "<NSLayoutConstraint:0x17009c250 'UISV-canvas-connection' FoodTracker.RatingControl:0x100c02400.top == UIButton:0x100c12d90.top (active)>", 
    "<NSLayoutConstraint:0x17009c340 'UISV-canvas-connection' V:[UIButton:0x100c12d90]-(0)-| (active, names: '|':FoodTracker.RatingControl:0x100c02400)>", 
    "<NSLayoutConstraint:0x17009bf30 'UIView-Encapsulated-Layout-Height' FoodTracker.RatingControl:0x100c02400.height == 50 (active)>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x17409af40 UIButton:0x100c12d90.height == 44 (active)> 

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. 

Je mets les contraintes pour la largeur du bouton == 44 et pour la hauteur du bouton == 44, mais aucun de l'autre contraintes. J'ai tout fait comme décrit dans le tutoriel et je n'ai aucune idée de la raison pour laquelle cela ne fonctionne pas. J'ai vérifié toutes les contraintes que je peux trouver mais je ne suis pas sûr si c'était tout parce que je ne suis pas très expérimenté avec Xcode. Quelqu'un at-il une idée de la façon de résoudre le problème?

This is how it should look like: Apples Result But this is how it looks: My Result (Only The Red Area is important)

Thx pour votre aide!

Nico

+0

est le carré/rectangle rouge un UIButton ou un UIView? – DonMag

+0

UIButton à l'intérieur d'un StackView. –

+0

ah - ok, je viens de jeter un oeil à travers le tutoriel que vous suivez .... Est-ce que le StackView lui-même est dans un StackView * vertical * qui contient les autres éléments? Si oui, est-ce que * Alignment de StackView est réglé sur Fill? – DonMag

Répondre

0

Basé sur le message d'erreur, je pense que vous avez intégré le bouton dans un UIStackView. La vue de la pile a des contraintes incorrectes ou aucune contrainte et utilise le masque d'autoresizing. La taille de la vue de la pile est de 343 x 50 et force le bouton à correspondre.

+0

Toutes vos suggestions sont bonnes. Je ne définis aucune contrainte pour la vue Stack. Mais les gars qui ont écrit le didacticiel n'ont pas non plus .. (Aud ils sont de pomme donc ça devrait être juste je pensais ..) Que dois-je faire pour délier le bouton à la taille de la vue empilée? Juste définir ses propres contraintes pour la pile View? –

+0

Avez-vous besoin d'une vue de pile? –

+0

Il y aura 5 boutons qui devraient être positionnés l'un à côté de l'autre (horizontalement). Donc je crois que j'en ai besoin? Je ne sais pas vraiment, je veux l'apprendre: D –

0

On dirait que vous avez un UIStackView. Supprimez le UIButton de UIStackView et définissez la contrainte supérieure de UIButton le même espacement que vous avez défini dans votre UIStackView et définissez le bord d'alignement d'UIButton à UiStackView et vous êtes bon

+0

Ok, mais je ne veux pas déplacer le bouton hors de la vue Stack. Le didacticiel devrait m'apprendre comment travailler avec des vues de pile, donc je ne veux pas travailler autour d'eux .. –

+0

Vous devriez lire sur ce qu'est un but d'UIStackView. Personnellement, je l'utilise si je veux des contraintes identiques dans toutes les vues qui s'y trouvent. Vous ne voulez clairement pas les mêmes contraintes pour l'UIButton. Donc, il devrait être en dehors de l'UIStackView.Le sortir ne vous fera pas apprendre moins sur UIStackView – hooliooo

+0

Je ne veux pas les mêmes Constructions pour ce bouton que pour la vue Stack, mais il y aura 5 boutons dans cette pile qui devraient avoir toutes les mêmes contraintes et poser à côté de chaque autre (horizontalement) .. Je pensais que le but d'un Stack View. Pour avoir plusieurs objets l'un à côté de l'autre –

0

J'ai trouvé la raison et la solution.

Vue horizontale de la pile - remplissage de l'espace interne propre par vertical et horizontal. C'est méchant - Horizontal Stack View définira la hauteur et le poids des objets internes pour remplir tout l'espace disponible.

seul moyen de supprimer cet avertissement que je trouve - est réglée largeur/hauteur horizontale Stack Vue pour adapter parfaitement avec/hauteur de tous les éléments internes: 252x44