Move View with Keyboard Swift: Otimização e Performance

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Move View with Keyboard Using Swift: Otimização e Performance

\n\n

Todo desenvolvedor iOS já enfrentou pelo menos uma vez a situação em que o teclado cobre descaradamente um UITextField ou UITextView. O usuário toca no campo, o teclado aparece, mas a interface permanece impassível. O resultado: irritação, erros de digitação e desinstalação do aplicativo. Resolver esse problema em Swift não é apenas "move view with keyboard", mas toda uma ciência sobre performance e experiência do usuário.

\n\n

Neste artigo, vamos analisar como implementar corretamente o move view with keyboard using Swift, otimizar animações e evitar erros comuns. Você receberá código pronto que pode ser inserido diretamente no projeto e entenderá por que algumas abordagens travam a UI, enquanto outras funcionam perfeitamente.

\n\n

Por que as soluções padrão geralmente funcionam mal?

\n\n

No Stack Overflow, a pergunta "Move view with keyboard using Swift" acumulou milhares de visualizações. E não é por acaso. Muitos iniciantes copiam a primeira solução que encontram de 2015, que usa UIKeyboardWillShowNotification e altera rigidamente o frame de uma UIView. Resultado: animação instável, vazamentos de memória e bugs em diferentes modelos de iPhone.

\n\n

Principais problemas das abordagens antigas:

\n
    \n
  • Alteração direta do frame sem considerar a safe area;
  • \n
  • Ignorar a duração e as curvas de animação do teclado;
  • \n
  • Falta de tratamento para rotação de tela e multitarefa;
  • \n
  • Esquecimento: notificações não são removidas, objetos não são limpos.
  • \n
\n\n

O Swift moderno (5.0+) e o UIKit permitem fazer tudo de forma elegante e rápida. Vamos analisar o padrão ideal.

\n\n

Preparação: o que vamos precisar

\n\n

Para implementar o move view with keyboard using Swift, usaremos:

\n
    \n
  • NotificationCenter para monitorar eventos do teclado;
  • \n
  • UIView.animate com parâmetros da notificação;
  • \n
  • UIScrollView como contêiner base (mas também pode ser sem ele);
  • \n
  • Gerenciamento adequado de memória (weak self, removeObserver).
  • \n
\n\n

Todo o código será escrito em um UIViewController. Se você usa SwiftUI, os princípios são os mesmos, mas a API é diferente (falaremos sobre isso no final do artigo).

\n\n

Passo 1: Registrar as notificações do teclado

\n\n

A primeira coisa a fazer é se inscrever em duas notificações principais: UIResponder.keyboardWillShowNotification e UIResponder.keyboardWillHideNotification. São elas que nos fornecem o tamanho, a duração e a curva da animação.

\n\n
override func viewDidLoad() {\n    super.viewDidLoad()\n    \n    NotificationCenter.default.addObserver(\n        self,\n        selector: #selector(keyboardWillShow),\n        name: UIResponder.keyboardWillShowNotification,\n        object: nil\n    )\n    \n    NotificationCenter.default.addObserver(\n        self,\n        selector: #selector(keyboardWillHide),\n        name: UIResponder.keyboardWillHideNotification,\n        object: nil\n    )\n}\n
\n\n

Observe: object: nil significa que estamos ouvindo notificações de qualquer teclado. Isso é correto para a maioria dos casos.

\n\n

Passo 2: Manipulador keyboardWillShow

\n\n

Neste método, extraímos da notificação o tamanho do teclado e a duração da animação. Em seguida, movemos a view para cima pela altura do teclado.

\n\n
@objc private func keyboardWillShow(_ notification: Notification) {\n    guard let userInfo = notification.userInfo,\n          let keyboardFrame = userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect,\n          let duration = userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? Double,\n          let curve = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? UInt else {\n        return\n    }\n    \n    let keyboardHeight = keyboardFrame.height\n    let animation                

Blogs

Book Recommendations