Je n'ai jamais travaillé avec des contraintes de mise en page automatique auparavant. J'ai une petite nouvelle application sur laquelle je travaille et j'ai remarqué que les vues du NIB par défaut sont mises en page automatiquement. Donc, j'ai pensé que je profiterais de l'occasion pour travailler avec et essayer de comprendre où Apple allait avec cela.
Premier défi:
J'ai besoin de redimensionner un MKMapView et je voudrais l'animer à la nouvelle position. Si je fais cela comme je suis habitué:
[UIView animateWithDuration:1.2f
animations:^{
CGRect theFrame = worldView.frame;
CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170);
worldView.frame = newFrame;
}];
... alors le MKMapView reviendra à sa hauteur d'origine chaque fois qu'une vue sœur est mise à jour (dans mon cas, un titre de UISegmentedControl est mis à jour [myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]
).
Alors, ce que je pense que je veux faire est de changer les contraintes du MKMapView d'être égale à la hauteur de la vue parent d'être par rapport au sommet de la UISegmentedControl qu'il était couvrant:V:[MKMapView]-(16)-[UISegmentedControl]
Ce que je veux, c'est que la hauteur de MKMapView soit raccourcie afin que certains contrôles sous la vue de la carte soient révélés. Pour ce faire, je pense que je dois changer la contrainte d'une vue pleine taille fixe à une vue où le bas est contraint au sommet d'un UISegmentedControl ... et j'aimerais qu'il s'anime lorsque la vue se réduit à une nouvelle taille.
Comment s'y prend-on?
Modifier - cette animation ne s'anime pas bien que le bas de la vue monte instantanément de 170:
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
et le nibMapViewConstraint
est câblé dans IB à la contrainte d'espace vertical inférieure.