Eu nunca trabalhei com restrições de autolayout antes. Estou trabalhando em um novo aplicativo pequeno e notei que as visualizações do NIB estão padronizadas para o autolayout. Então, pensei em aproveitar a oportunidade para trabalhar com ele e tentar descobrir para onde a Apple está indo com isso.
Primeiro desafio:
Preciso redimensionar um MKMapView e gostaria de animá-lo para a nova posição. Se eu fizer isso da maneira que estou acostumado:
[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;
}];
... então o MKMapView retornará à sua altura original sempre que uma visão de irmão for atualizada (no meu caso, o título de um UISegmentedControl está sendo atualizado [myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]
).
Então, o que eu acho que quero fazer é alterar as restrições do MKMapView de serem iguais à altura da visualização pai para serem relativas ao topo do UISegmentedControl que ele estava cobrindo:V:[MKMapView]-(16)-[UISegmentedControl]
O que eu quero é que a altura do MKMapView diminua para que alguns controles abaixo da visualização do mapa sejam revelados. Para fazer isso, acho que preciso alterar a restrição de uma exibição em tamanho fixo fixa para uma em que a parte inferior esteja restrita à parte superior de um UISegmentedControl ... e gostaria que ela fosse animada à medida que a exibição diminui para um novo tamanho.
Como alguém faz isso?
Editar - esta animação não está animada, embora a parte inferior da exibição suba 170 instantaneamente:
[UIView animateWithDuration:1.2f
animations:^{
self.nibMapViewConstraint.constant = -170;
}];
e o nibMapViewConstraint
está conectado no IB à restrição de espaço vertical inferior.