Disons que j'ai un projet qui ressemble à ceci:
Il existe deux UIView
s - l'un appelé yellowBox
et l'autre appelé redBox
. Les contraintes de disposition automatique imposent que le yellowBox
soit à 60 points du haut de la vue d'ensemble avec 350 points d'espaces de début et de fin (c'est-à-dire à gauche et à droite de la vue). redBox
a les mêmes contraintes d'espace de début et de fin. Il y a une contrainte d'espace vertical entre les deux cases de 0 pour indiquer que le bas du yellowBox
doit toujours être directement au-dessus du redBox
.
Lorsque l'utilisateur appuie sur le bouton Développer la boîte jaune, j'aimerais que la hauteur du yellowBox
augmente et, par conséquent, le redBox
se déplace vers le bas pour continuer à satisfaire la contrainte d'espace vertical (que le yellowBox
est toujours au-dessus de 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, je n'ai pas pu faire fonctionner cela correctement. Comme vous pouvez le voir par l'icône rouge, il y a un problème avec les contraintes pour le moment:
ce qui est assez juste, car la disposition automatique ne permet pas de connaître la hauteur des boîtes. Cependant, je ne sais pas comment résoudre ce problème de manière à permettre le redimensionnement et le déplacement des boîtes. Par exemple, si je spécifie une contrainte de hauteur sur le yellowBox
, cela l'empêchera d'être redimensionné. Si je fixe la contrainte de hauteur à supérieure ou égale (pour permettre à la hauteur de yellowBox
d'augmenter), alors j'obtiens une contrainte différente Erreur:
Toutes les contraintes ont été établies en utilisant Xcode dans le storyboard - aucune n'a été écrite en code.
Toute aide grandement appréciée.
EDIT: Il s'avère que le yellowBox
grandit lorsque l'on clique sur le bouton - c'est juste que je ne pouvais pas le dire car il apparaît derrière le redBox
. Je ne l'ai remarqué qu'après avoir cliqué dessus environ quatre fois et il a commencé à apparaître au bas du redBox
. Cependant, la même question demeure: comment faire en sorte que le redBox
reste toujours au bas du yellowBox
.
Essayez-le comme mentionné par shwet-solanki , mais ajoutez la ligne suivante après avoir changé la contrainte:
[self.view layoutIfNeeded];
l'IBAction ressemblerait à:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
self.yellowBoxHeightConstraint.constant += 50;
[self.view layoutIfNeeded];
}];
}
Où yellowBoxHeightConstraint
est le IBOutlet
pour la contrainte de hauteur de yellowBox
. J'espère que cela t'aides.
yellowBoxHeightConstraint.constant += 50;
J'espère que cela fonctionne pour toi.
//
// WPViewController.h
// AutoLayoutTEst
//
// Created by VASANTH K on 09/01/14.
//
//
#import <UIKit/UIKit.h>
@interface WPViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIButton *button1;
- (IBAction)buttClicked:(id)sender;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *heightConstrain;
@property (strong, nonatomic) IBOutlet UIButton *button2;
@end
cliquez sur Événement
- (IBAction)buttClicked:(id)sender {
self.heightConstrain.constant=100;
}
ici, vous devez définir le heightConstrain
pour le bouton jaune, puis créer une sortie de référence pour ce bouton, puis mettre à jour le heightConstrain
pour mettre à jour la taille de ce bouton, il déplacera automatiquement votre bouton rouge vers le bas.
https://github.com/vasanth3008/AutoLayoutHeighDemo
référer mon exemple de projet de démonstration