Modifier la contrainte par programme Swift
J'ai la vue suivante contrôleur dans mon storyboard :
Il aura toujours 6 vues d'images qui sont, par défaut, égale à la largeur et la hauteur. Chaque affichage de l'image est contraint à l'superview : "l'égalité des hauteurs" et un multiplicateur de 1/2.
Cependant, avant de me charger des images à l'intérieur, j'ai lu une propriété qui me donne de la hauteur souhaitée pour une image (largeur ne sera jamais modifié).
Donc mon interface (à l'exécution) peut ressembler à ceci :
Je pense que j'ai besoin de modifier le multiplicateur constant, mais c'est en lecture seule.
J'ai vu des posts disant que nous pouvons mettre à jour le constante propriété de la contrainte, mais c'est dans les points, j'en ai besoin pour travailler sur tous les appareils.
Maintenant que recommanderiez-vous ? Dois-je supprimer la contrainte et en ajouter un nouveau ? Si je n'ai pas l'enlever et essayer d'appliquer une nouvelle hauteur de la contrainte, il sera automatiquement retiré pour moi ?
Dois-je utiliser les gousses comme snapkit pour faire le travail ?
Merci pour votre aide.
MODIFIER
Voici le code que j'ai essayé, mais n'a pas réussi :
for (index, (drawing, ratio)) in drawingElements.enumerate() {
drawingViews[index].image = UIImage(named: drawing)
//update height constraint if ratio is different than defaut ratio of 1/2
if ratio != 0.5 {
heightConstraints[index].active = false
let newHeightConstraint = NSLayoutConstraint(item: drawingViews[index], attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.Height, multiplier: ratio, constant: 0)
drawingViews[index].addConstraint(newHeightConstraint)
self.view.layoutIfNeeded()
}
}
Suis-je le fais mal ? Je ne suis pas sûr au sujet de la nouvelle hauteur de la contrainte si
source d'informationauteur H4Hugo
Vous devez vous connecter pour publier un commentaire.
Donc, c'est la façon dont j'ai obtenu ceci :
Créer une contrainte par programme (hauteur dans mon cas) :
Désactiver vieux de contrainte et de définir le nouveau si nécessaire
Remarque: heightContraints est un tableau de NSLayoutConstraint qui contient mes prises de
Les contraintes constantes sont liés au contenu de la contrainte de l'élément.
C'est pourquoi vous êtes obtenir un tel écran. Le moyen le plus facile - créer une image avec la couleur claire et définie par défaut. Après le téléchargement terminé juste de définir une nouvelle image pour votre imageView
Ou vous pouvez définir IBOutlet pour votre hauteur de la contrainte et de la variation de la valeur pour les différentes situations
c'est à dire
Vous ne pouvez pas changer le multiplicateur pour des raisons inconnues de moi (une sorte de Pomme de mise en œuvre du détail sans doute). Vous pouvez supprimer une contrainte et en créer un nouveau, cependant. Vous devez supprimer l'ancienne contrainte, car il ne sera pas supprimé automatiquement, et vous obtiendrez un conflit. Alternativement, vous pouvez créer la première contrainte (avec le
0.5
multiplicateur) avec une priorité inférieure. De cette façon, vous pouvez garder (mise en page automatique serait tout simplement l'ignorer), mais je ne pense pas que c'est un chemin à parcourir, car pourquoi auriez-vous besoin qui limite inutile? Simplement la supprimer.Comme pour la troisième partie mise en page des moteurs et des bibliothèques – malheureusement, je ne peux pas vous donner tous les conseils ici.