A resposta é [view layoutIfNeeded]
.
Aqui está o porquê:
Você ainda obtém a largura e altura atuais da visualização inspecionando view.bounds.size.width
e view.bounds.size.height
(ou o quadro, que é equivalente, a menos que você esteja brincando com view.transform
).
Se o que você deseja é a largura e a altura implícitas em suas restrições existentes, a resposta não é inspecionar as restrições manualmente, pois isso exigiria que você reimplementasse toda a lógica de resolução de restrições do sistema de layout automático para interpretá-las restrições. Em vez disso, o que você deve fazer é apenas pedir ao layout automático para atualizar esse layout , para que ele resolva as restrições e atualize o valor de view.bounds com a solução correta e, em seguida, inspecione view.bounds.
Como você pede ao layout automático para atualizar o layout? Ligue [view setNeedsLayout]
se quiser que o layout automático atualize o layout na próxima curva do loop de corrida.
No entanto, se você deseja atualizar o layout imediatamente, para que possa acessar imediatamente o novo valor de limites posteriormente em sua função atual ou em outro ponto antes da virada do loop de execução, você precisa chamar [view setNeedsLayout]
e [view layoutIfNeeded]
.
Você fez uma segunda pergunta: "como posso alterar uma restrição de altura / largura se não tenho uma referência a ela diretamente?".
Se você criar a restrição em IB, a melhor solução é criar um IBOutlet em seu controlador de visão ou em sua visão para que você tenha uma referência direta a ele. Se você criou a restrição no código, deve manter uma referência em uma propriedade interna fraca no momento em que a criou. Se outra pessoa criou a restrição, você precisa encontrá-la examinando o exame da propriedade view.constraints na visão e, possivelmente, toda a hierarquia de visão, e implementando a lógica que encontra o NSLayoutConstraint crucial. Este é provavelmente o caminho errado a seguir, uma vez que também requer efetivamente que você determine qual restrição particular determinou o tamanho dos limites, quando não há garantia de que haja uma resposta simples para essa pergunta. O valor final dos limites pode ser a solução para um sistema muito complicado de múltiplas restrições,