Move View with Keyboard Swift : Optimisation et performance

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Move View with Keyboard Using Swift : Optimisation et performance

\n\n

Chaque développeur iOS a déjà été confronté à la situation où le clavier recouvre impoliment un UITextField ou un UITextView. L'utilisateur tape dans le champ, le clavier apparaît, mais l'interface reste impassible. Résultat : irritation, erreurs de saisie et suppression de l'application. Résoudre ce problème en Swift n'est pas simplement un « move view with keyboard », c'est toute une science de la performance et de l'expérience utilisateur.

\n\n

Dans cet article, nous allons voir comment implémenter correctement move view with keyboard using Swift, optimiser les animations et éviter les erreurs typiques. Vous obtiendrez un code prêt à l'emploi que vous pourrez insérer directement dans votre projet et comprendrez pourquoi certaines approches ralentissent l'interface utilisateur alors que d'autres fonctionnent parfaitement.

\n\n

Pourquoi les solutions standard fonctionnent-elles souvent mal ?

\n\n

Sur Stack Overflow, la question « Move view with keyboard using Swift » a recueilli des milliers de vues. Et ce n'est pas un hasard. De nombreux débutants copient la première solution venue de 2015, qui utilise UIKeyboardWillShowNotification et modifie brutalement le frame d'un UIView. Résultat : animation saccadée, fuites mémoire et bugs sur différents modèles d'iPhone.

\n\n

Les principaux problèmes des anciennes approches :

\n
    \n
  • Modification directe du frame sans tenir compte de la safe area ;
  • \n
  • Ignorance de la durée et des courbes d'animation du clavier ;
  • \n
  • Absence de gestion de la rotation de l'écran et du multitâche ;
  • Oubli : les notifications ne sont pas supprimées, les objets ne sont pas nettoyés.
\n\n

Le Swift moderne (5.0+) et UIKit permettent de faire tout cela de manière élégante et rapide. Analysons le modèle optimal.

\n\n

Préparation : de quoi avons-nous besoin

\n\n

Pour implémenter move view with keyboard using Swift, nous allons utiliser :

\n
    \n
  • NotificationCenter pour suivre les événements du clavier ;
  • UIView.animate avec les paramètres de la notification ;
  • UIScrollView comme conteneur de base (mais on peut s'en passer) ;
  • Une bonne gestion de la mémoire (weak self, removeObserver).
\n\n

Nous écrirons tout le code dans un UIViewController. Si vous utilisez SwiftUI, les principes sont les mêmes, mais l'API est différente (nous en parlerons à la fin de l'article).

\n\n

Étape 1 : Enregistrer les notifications du clavier

\n\n

La première chose à faire est de s'abonner à deux notifications clés : UIResponder.keyboardWillShowNotification et UIResponder.keyboardWillHideNotification. Ce sont elles qui nous donnent la taille, la durée et la courbe d'animation.

\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

Remarque : object: nil signifie que nous écoutons les notifications de n'importe quel clavier. C'est correct dans la plupart des cas.

\n\n

Étape 2 : Le gestionnaire keyboardWillShow

\n\n

Dans cette méthode, nous extrayons de la notification la taille du clavier et la durée de l'animation. Ensuite, nous déplaçons la vue vers le haut de la hauteur du clavier.

\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