UIView des modifications animées avec des contraintes de mise en forme automatique
Dire que j'ai un projet qui se présente comme suit:
Il y a deux UIView
s appelée yellowBox
et l'autre appelé redBox
. La mise en page automatique des contraintes imposent que le yellowBox
est de 60 points à partir du haut de la superview avec 350 points d'attaque et de fuite des espaces (c'est à dire à gauche et à droite de la vue). Le redBox
a la même attaque et de fuite des contraintes d'espace. Il y a un espace vertical de contrainte entre les deux cases de 0 pour indiquer que le bas de la yellowBox
doit toujours être directement sur le dessus de la redBox
.
Lorsque l'utilisateur appuie sur l'expansion de la Boîte Jaune bouton, je voudrais que la hauteur de la yellowBox
à augmenter et, en conséquence, la redBox
se déplace vers le bas afin de continuer à satisfaire l'espace vertical contrainte (que l' yellowBox
est toujours sur le dessus de la redBox
). Voici le code d'animation:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
Cependant, j'ai été incapable de le faire fonctionner correctement. Comme vous pouvez le voir par l'icône rouge, il y a un problème avec les contraintes du moment:
ce qui est assez juste, car il n'y a aucun moyen pour la mise en page automatique de connaître la hauteur des cases. Cependant, je ne sais pas comment résoudre ce problème de telle manière qu'il permette pour les cases à être redimensionnée et déplacée. Par exemple, si je spécifier une hauteur de contrainte sur les yellowBox
alors qui va l'empêcher d'être redimensionnée. Si je définis la hauteur de la contrainte supérieure ou égale (pour permettre à la yellowBox
hauteur d'augmenter), puis-je obtenir une contrainte différente d'erreur:
Toutes les contraintes ont été établies à l'aide de Xcode dans le storyboard - aucun n'a été écrit dans le code.
Toute aide grandement appréciée.
EDIT: Comme il s'avère, la yellowBox
est croissante lorsque le bouton est cliqué - c'est juste que je ne pouvais pas le dire, car il apparaît derrière le redBox
. J'ai remarqué seulement après avoir cliqué, environ quatre fois et il a commencé à apparaître au bas de la redBox
. Cependant, la même question demeure: comment obtenir les redBox
de toujours coller au fond de la yellowBox
.
- u peut vérifier si viewDidLayoutSubViews méthode appelée dans ur viewController? Lorsque vous effectuez cliquez sur l'événement.
- Non, le
viewDidLayoutSubViews
méthode n'est pas appelée. - essayez de définir la limite au lieu de la vue peut travailler quelques temps. même les reprises de soi.yellowBox.frame = newFrame; deux fois dans u code peut également fixer quelques fois
- Cela ne semble pas fonctionner, en plus de la répétition du code plusieurs fois (jusqu'à ce qu'il faut) ne semble pas être la meilleure solution au problème...
- vérifier ma réponse et de démonstration. cela aidera à
Vous devez vous connecter pour publier un commentaire.
Essayer, comme mentionné par shwet-solanki, mais d'ajouter la ligne suivante après la modification de la contrainte:
la IBAction ressemblerait à:
Où
yellowBoxHeightConstraint
est leIBOutlet
pour la hauteur de la contrainte deyellowBox
.Espérons que cette aide.
redBox
, qui doit se déplacer en raison des contraintes. Il est trivial dans ce cas, mais l'exemple dans cette question c'est juste un projet de test pour démontrer le problème - le problème se produit dans un beaucoup plus grand projet où l'utilisation de l'approche qui vous ont suggéré malheureusement pas être possible ou plus facile à maintenir.setNeedsLayout
, en effet, est recommandée dans ce cas.layoutIfNeeded
sur monUIImageView
au lieu d'afficheryellowBoxHeightConstraint.constant += 50;
Espérons que cela fonctionne pour vous.
yellowBox
(avec leredBox
épinglé au fond de layellowBox
), mais il n'anime pas le changement, il arrive tout d'un coup.cliquez sur l'Événement
ici u besoin de définir la
heightConstrain
pour le bouton Jaune puis de créer la référence prise pour que le bouton de mise à jour de laheightConstrain
pour mettre à jour la taille de ce bouton, il va automatiquement déplacer votre bouton Rouge en bas.https://github.com/vasanth3008/AutoLayoutHeighDemo
consulter mon exemple de projet de démonstration