Eu tenho um UITextField que eu quero aumentar sua largura quando tocado. Configurei as restrições e verifiquei se a restrição à esquerda tem a prioridade mais baixa que a que estou tentando animar no lado direito.
Aqui está o código que estou tentando usar.
// move the input box
UIView.animateWithDuration(10.5, animations: {
self.nameInputConstraint.constant = 8
}, completion: {
(value: Bool) in
println(">>> move const")
})
Isso funciona, mas parece acontecer instantaneamente e não parece haver nenhum movimento. Tentei definir 10 segundos para garantir que não perdesse nada, mas obtive os mesmos resultados.
nameInputConstraint é o nome da restrição que eu controlo arrastada para conectar-me à minha classe do IB.
Agradecemos desde já a sua ajuda!
xcode
swift
constraints
xcode6
icekomo
fonte
fonte
Respostas:
Você precisa primeiro alterar a restrição e animar a atualização.
Swift 2
Swift 3, 4, 5
fonte
self
usado no fechamento.SWIFT 4.x:
Exemplo com conclusão:
fonte
É muito importante ressaltar que
view.layoutIfNeeded()
se aplica apenas às subvisões de exibição.Portanto, para animar a restrição de exibição, é importante chamá-la na superview de exibição para animar da seguinte maneira:
Um exemplo para um layout simples da seguinte maneira:
fonte
Com o Swift 5 e iOS 12.3, de acordo com suas necessidades, você pode escolher uma das três maneiras a seguir para resolver seu problema.
# 1 Usando
UIView
oanimate(withDuration:animations:)
método de classeanimate(withDuration:animations:)
tem a seguinte declaração:O código do Playground abaixo mostra uma possível implementação de
animate(withDuration:animations:)
para animar a mudança constante de uma restrição de Layout automático.# 2 Usando
UIViewPropertyAnimator
oinit(duration:curve:animations:)
inicializador e ostartAnimation()
métodoinit(duration:curve:animations:)
tem a seguinte declaração:O código do Playground abaixo mostra uma possível implementação de
init(duration:curve:animations:)
estartAnimation()
para animar a mudança constante de uma restrição de Layout automático.# 3 Usando
UIViewPropertyAnimator
orunningPropertyAnimator(withDuration:delay:options:animations:completion:)
método de classerunningPropertyAnimator(withDuration:delay:options:animations:completion:)
tem a seguinte declaração:O código do Playground abaixo mostra uma possível implementação de
runningPropertyAnimator(withDuration:delay:options:animations:completion:)
para animar a mudança constante de uma restrição de Layout automático.fonte
No meu caso, atualizei apenas a exibição personalizada.
fonte
Veja isso .
O vídeo diz que você precisa adicionar apenas
self.view.layoutIfNeeded()
o seguinte:fonte