2017-07-31 2 views
0

J'essaye d'animer le changement de priorité dans 2 contraintes, mais je n'arrive pas à le faire fonctionner. Mon code d'animation, il est écrit que:L'animation de contrainte ne fonctionne pas

 UIView.animate(withDuration: 0.2, animations: { 
     if self.cardHeaderBottomtoBodyTopConstraint.priority == UILayoutPriorityDefaultHigh { 
      self.cardHeaderBottomtoBodyTopConstraint.priority = UILayoutPriorityDefaultLow 
      self.cardHeaderBottomToBodyBottomConstraint.priority = UILayoutPriorityDefaultHigh 
     } else { 
      self.cardHeaderBottomtoBodyTopConstraint.priority = UILayoutPriorityDefaultHigh 
      self.cardHeaderBottomToBodyBottomConstraint.priority = UILayoutPriorityDefaultLow 
     } 

     self.flightInformationBodyCard.layoutIfNeeded() 
     self.flightInformationBodyCard.updateConstraints() 
    }, completion: nil) 
+0

changer la priorité et appeler updateConstraints avant d'appeler la UIView.animate et conserver uniquement layoutIfNeeded dans la fonction d'animation – zombie

+0

Êtes-vous sûr que ces propriétés sont animables? – solenoid

+0

https://stackoverflow.com/questions/42584375/can-all-constraints-in-swift-3-be-animé celui-ci dit de faire le changement de la disposition de l'appel à l'intérieur du bloc d'animation, ne pouvait pas trouver un exemple non constant , sera intéressé de voir si cela fonctionne – solenoid

Répondre

0

Tout ce que je devais faire était de changer la méthode layoutIfNeeded à Superview comme dans:

 if self.cardHeaderBottomtoBodyTopConstraint.priority == UILayoutPriorityDefaultHigh { 
     self.cardHeaderBottomtoBodyTopConstraint.priority = UILayoutPriorityDefaultLow 
     self.cardHeaderBottomToBodyBottomConstraint.priority = UILayoutPriorityDefaultHigh 
    } else { 
     self.cardHeaderBottomtoBodyTopConstraint.priority = UILayoutPriorityDefaultHigh 
     self.cardHeaderBottomToBodyBottomConstraint.priority = UILayoutPriorityDefaultLow 
    } 

    //self.flightInformationBodyCard.updateConstraints() 

    UIView.animate(withDuration: 0.2, animations: { 

     self.flightInformationBodyCard.superview?.layoutIfNeeded() 

    }, completion: nil)