UIView alterações animadas com restrições de layout automáticas
Digamos que eu tenha um projeto parecido com o seguinte:
Existem doisUIView
s - um chamadoyellowBox
e o outro chamadoredBox
. As restrições de layout automático determinam que oyellowBox
está a 60 pontos da parte superior da superview, com 350 pontos à esquerda e à direita (ou seja, à esquerda e à direita da vista). oredBox
tem as mesmas restrições de espaço à esquerda e à direita. Há uma restrição de espaço vertical entre as duas caixas de 0 para indicar que a parte inferior doyellowBox
sempre deve estar diretamente em cima daredBox
.
Quando o usuário toca no botão Expandir caixa amarela, eu gostaria da altura doyellowBox
aumentar e, como resultado, aredBox
desce para continuar satisfazendo a restrição de espaço vertical (que oyellowBox
está sempre em cima daredBox
) Aqui está o código da animação:
- (IBAction)expandYellowBox:(id)sender {
[UIView animateWithDuration:0.5
animations:^{
CGRect newFrame = self.yellowBox.frame;
newFrame.size.height += 50;
self.yellowBox.frame = newFrame;
}];
}
No entanto, não consegui fazer isso funcionar corretamente. Como você pode ver pelo ícone vermelho, há um problema com as restrições no momento:
o que é justo o suficiente, pois não há como o layout automático saber a altura das caixas. No entanto, não sei como resolver esse problema de forma que permita que as caixas sejam redimensionadas e movidas. Por exemplo, se eu especificar uma restrição de altura noyellowBox
isso impedirá que seja redimensionado. Se eu definir a restrição de altura comomaior ou igual (para permitir que oyellowBox
altura para aumentar), então recebo um erro de restrição diferente:
Todas as restrições foram estabelecidas usando o Xcode no storyboard - nenhuma foi escrita no código.
Qualquer ajuda muito apreciada.
EDITAR: Como se vê, oyellowBox
está crescendo quando o botão é clicado - não sei dizer porque aparece atrás doredBox
. Eu só notei depois de clicar nele quatro vezes e ele começou a aparecer na parte inferior doredBox
. No entanto, a mesma pergunta ainda permanece - como obter oredBox
para sempre ficar no fundo doyellowBox
.