Non ho mai lavorato prima con i vincoli del layout automatico . Ho una nuova piccola app su cui sto lavorando e ho notato che le visualizzazioni del NIB sono predefinite per il layout automatico. Quindi, ho pensato di cogliere l'occasione per lavorare con esso e cercare di capire dove Apple sta con questo.
Prima sfida:
Devo ridimensionare un MKMapView e vorrei animarlo nella nuova posizione. Se lo faccio nel modo in cui sono abituato a:
[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;
}];
... quindi MKMapView tornerà alla sua altezza originale ogni volta che viene aggiornata una vista di pari livello (nel mio caso il titolo di un UISegmentedControl viene aggiornato [myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]
).
Quindi, quello che penso di voler fare è cambiare i vincoli di MKMapView dall'essere uguale all'altezza della vista genitore all'essere relativo alla parte superiore dell'UISegmentedControl che stava coprendo:V:[MKMapView]-(16)-[UISegmentedControl]
Quello che voglio è che l'altezza di MKMapView si accorci in modo che vengano rivelati alcuni controlli sotto la visualizzazione della mappa. Per fare ciò penso di aver bisogno di cambiare il vincolo da una vista a grandezza intera fissa a una in cui la parte inferiore è vincolata alla parte superiore di un UISegmentedControl ... e mi piacerebbe che si animasse quando la vista si restringe a una nuova dimensione.
Come si fa a farlo?
Modifica: questa animazione non si anima anche se la parte inferiore della vista si sposta verso l'alto di 170 istantaneamente:
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
ed nibMapViewConstraint
è cablato in IB al vincolo di spazio verticale inferiore.