Onde atualizar as restrições do Autolayout quando o tamanho muda?
Tenho váriosUIView
s dispostos ao longo do fundo de um recipienteUIView
. Quero que essas visualizações tenham sempre a mesma largura e sempre se estendam para preencher coletivamente a largura da visualização que contém (como os botões do teclado emoji na parte inferior). A maneira como estou abordando isso é definir larguras iguais a uma das vistas e, em seguida, basta atualizar a restrição de largura dessa vista parasuperviewWidth / numberOfViews
o que fará com que todas as outras visualizações sejam atualizadas para o mesmo valor.
Eu estou querendo saber onde o código para alterar a constante de restrição precisa ir. Ele precisa ser definido antes que o teclado apareça na tela pela primeira vez e atualize ao girar o dispositivo.
Minha primeira tentativa de solução foi colocá-la emupdateViewConstraints
e calcule a largura viacontainerView.frame.size.width
. Mas esse método é chamado duas vezes após o carregamento, na primeira vez que calcula os valores corretamente, mas na segunda vez, por algum motivo, ocontainerView
a largura é de 0,0. Outra questão é que, ao girar, ocontainerView
A largura não é o valor que será após a rotação, é o valor atual antes da rotação. Mas não quero esperar até que a rotação seja concluída para atualizar a restrição, porque os botões terão o tamanho original e serão alterados, o que será dissonante para o usuário.
Minha pergunta é: onde é o local mais apropriado para colocar esse código? Existe uma maneira melhor de calcular qual será a largura? Posso garantir que sempre será exatamente a mesma largura que a largura da tela. E eu estou usando Classes de tamanho no Xcode 6, entãowillRotateToInterfaceOrientation
e métodos semelhantes foram descontinuados.