2017-01-16 2 views
7

Pour cacher un sous-vue en UIStackView est-il préférable de régler la isHidden true ou d'utiliser removeArrangedSubview et enlever la sous-vue du parent Stackview à la place?Hiding la sous-vue dans UIStackview dans ios

J'utilise un Stackview pour organiser mes UIElements dans la cellule tableView. J'ai actuellement un parent StackView et un childStackview arrangé à l'intérieur. La vue enfant doit être affichée ou masquée en fonction d'une condition. Je définis la propriété isHidden de la vue enfant sur true lorsque la condition devient vraie.

Lorsque je défile et que de nouvelles cellules deviennent visibles Je reçois les messages suivants dans la console. L'application ne plante pas.

NSLayoutConstraint: 0x600000093470 'UISV-toile connexion' UIStackView: 0x7fd4527201b0.top == UILabel:. 0x7fd452720370'Day Off - repos et de sommeil ... Top (actif)

Faire un point d'arrêt symbolique à UIViewAlertForUnsatisfiableConstraints pour attraper cela dans le débogueur. Les méthodes de la catégorie UIConstraintBasedLayoutDebugging sur UIView listées dans <UIKit/UIView.h> peuvent également être utiles. [LayoutConstraints] Impossible de satisfaire simultanément les contraintes. Probablement au moins une des contraintes de la liste suivante est celle que vous ne voulez pas.
Essayez ceci:

  1. regard à chaque contrainte et essayer de comprendre que vous ne vous attendez pas;
  2. trouvez le code qui a ajouté la contrainte ou les contraintes non désirées et corrigez-le. ( "", "", "", "", "", "", "" )

tente de récupérer en brisant la contrainte

+1

Comme la plupart des questions sur quelle approche est la meilleure, la réponse dépend de votre situation particulière. Pouvez-vous fournir quelques détails de plus? – Jim

+0

Merci Jim, j'ai ajouté un ParentStackView et un ChildStackview l'un dans l'autre. J'ai besoin de cacher le childstackview basé sur une condition. Lorsque je mets le isHidden de la stackview enfant à true, je reçois le message suivant dans le journal de la console de xcode. Cependant, il ne plante pas l'application. Je reçois cette erreur Impossible de satisfaire simultanément les contraintes. Probablement au moins une des contraintes de la liste suivante est celle que vous ne voulez pas.\t Va tenter de récupérer en cassant la contrainte – jay

+0

Jay, allez-y, éditez votre question et ajoutez-y les détails avant que les gens ne les déprécient pour ne pas avoir de détails. Supposons également que la vue de la pile enfant disparaisse (vous la masquez ou utilisez removeArrangedSubview). Voulez-vous que ça revienne? – Jim

Répondre

8

Pour répondre votre première question, si vous n'avez pas besoin d'afficher la sous-vue, la chose la plus logique à faire serait de l'enlever en utilisant removeArrangedSubview(UIView). Comme vous le savez peut-être, la vue de pile met automatiquement à jour sa mise en page chaque fois que des vues sont ajoutées, supprimées, insérées ou masquées/non affichées.

L'avertissement que vous recevez dans la console à propos des contraintes peut ou non être lié à tout ce que vous avez implémenté pour la sous-vue en ce moment. L'avez-vous mentionné parce que vous pensez que cela pourrait être lié?

Espérons que ça aide.

+0

Merci Jim, ça aide à avoir une clarté conceptuelle. Je pensais qu'ils étaient liés lorsque j'ai commencé à voir ces messages dans la console après que j'ai mis en place le stackview. – jay

+0

De rien, Jay. Puisque vous êtes nouveau à la question posée ici (bienvenue, soit dit en passant), allez-y et notez ma réponse comme la bonne si elle vous a aidé et que vous en êtes satisfait. Si vous continuez à avoir des problèmes avec les contraintes conflictuelles, postez une autre question et n'oubliez pas d'inclure les détails importants. Ces problèmes de contraintes peuvent être vraiment difficiles à résoudre. – Jim

+0

done !, j'ai marqué la réponse. Et les erreurs de contrainte apparaissaient à cause d'une image n'étant pas dans l'imageview. Une fois que j'ai corrigé cette contrainte, les erreurs ont également disparu. – jay