Keyboard Avoidance — essence, méthodes d’implémentation et décalage de l’interface

Auteur : IT Sectr Publié le : 2026-07-09 Temps de lecture : 9 min

Keyboard Avoidance est une technique d’adaptation de l’interface d’une application iOS lors de l’apparition du clavier système, qui peut recouvrir les champs de texte et d’autres éléments interactifs. Sans la mise en œuvre de ce mécanisme, l’utilisateur ne voit physiquement pas ce qu’il saisit, ce qui entraîne des erreurs et une dégradation de l’expérience utilisateur. Selon la Apple Developer Documentation (2026), à partir d’iOS 15, il est recommandé d’utiliser UIScrollView en combinaison avec UIScrollView.keyboardLayoutGuide pour la gestion automatique du décalage du contenu.

Points clés

  • Keyboard Avoidance — décalage du contenu vers le haut lors de l’apparition du clavier pour que le champ de texte actif reste visible.
  • UIKeyboardWillShowNotification et UIKeyboardWillHideNotification fournissent la taille et l’animation du clavier pour adapter la mise en page.
  • UIScrollView.keyboardLayoutGuide (iOS 15+) gère automatiquement les marges lors de l’affichage et du masquage du clavier.
  • IQKeyboardManager est une bibliothèque tierce populaire pour le Keyboard Avoidance automatique sans code manuel.
  • UITextFieldDelegate permet de suivre le début et la fin de l’édition pour un contrôle précis du décalage.

Qu’est-ce que Keyboard Avoidance

Keyboard Avoidance est un ensemble de techniques garantissant la visibilité du champ de saisie actif lors de l’apparition du clavier système sur iOS. Le problème de base : le clavier occupe jusqu’à 50 % de l’écran et couvre la moitié inférieure de l’interface, y compris les champs de texte, les boutons d’envoi et d’autres éléments.

Il existe trois approches principales pour la mise en œuvre : la gestion manuelle via les Keyboard Notifications (méthode classique, fonctionne depuis iOS 3.0), l’utilisation de UIScrollView avec défilement automatique (recommandée par Apple) et le Keyboard Layout Guide (méthode moderne avec iOS 15+). Le choix dépend de la version minimale prise en charge d’iOS et de la complexité de l’interface.

Selon Apple, l’absence de Keyboard Avoidance est l’une des causes les plus fréquentes de rejet d’application lors de la révision si les champs de texte sont complètement recouverts par le clavier. Les App Store Guidelines exigent explicitement que tous les éléments interactifs restent accessibles pendant la saisie active.

Pourquoi iOS ne le fait-il pas automatiquement

iOS ne peut pas déterminer automatiquement quel élément doit rester visible car il ne connaît pas la sémantique de l’interface. Dans un formulaire simple avec un champ de texte, il suffit de déplacer tout l’écran vers le haut. Dans une interface complexe avec des panneaux personnalisés, des boutons flottants et plusieurs sections, une logique de comportement différente est nécessaire.

De plus, certaines applications ne décalent pas intentionnellement le contenu — par exemple, les calculateurs de clavier ou les éditeurs où le clavier fait partie de l’espace de travail. iOS laisse la décision au développeur, en fournissant des API flexibles pour tout scénario.

Notifications de cadre du clavier

UIKeyboardWillShowNotification est la notification principale qu’iOS envoie avant l’apparition du clavier. Elle contient un CGRect avec la position finale du clavier dans le dictionnaire UIResponder.keyboardFrameEndUserInfoKey, ainsi que la durée de l’animation dans UIResponder.keyboardAnimationDurationUserInfoKey.

Le gestionnaire de notification doit calculer le chevauchement entre le champ de texte actif et le clavier, puis modifier la marge inférieure (contentInset ou frame) du conteneur. Si le champ se trouve en dessous du bord supérieur du clavier, le contenu se décale vers le haut de la quantité de chevauchement. Lorsque le clavier se masque, la marge revient à sa valeur d’origine.

swift
@objc func keyboardWillShow(_ notification: Notification) {
    guard let keyboardFrame = notification
        .userInfo?[UIResponder.keyboardFrameEndUserInfoKey]
        as? CGRect else { return }
    
    let keyboardHeight = keyboardFrame.height
    scrollView.contentInset.bottom = keyboardHeight
    scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
}

Lors de l’utilisation de notifications, il est important de gérer l’animation de manière synchrone avec le clavier système. iOS fournit la courbe d’animation (UIResponder.keyboardAnimationCurveUserInfoKey) et la durée. Utilisez UIView.animate avec ces paramètres pour que le contenu se déplace en douceur, simultanément à l’apparition du clavier.

Keyboard Layout Guide dans iOS 15+

UIScrollView.keyboardLayoutGuide est une API moderne pour Keyboard Avoidance, introduite dans iOS 15. Elle suit automatiquement la position du clavier et met à jour les contraintes Auto Layout qui relient la partie inférieure de l’interface au bord supérieur du clavier.

Pour l’utiliser, il suffit d’activer le guide de mise en page sur un UIScrollView ou UIStackView et d’y attacher la contrainte inférieure du contenu. Aucun travail manuel avec les notifications, le calcul de hauteur ou l’animation n’est nécessaire — le système fait tout automatiquement, en synchronisant l’animation avec l’apparition et le masquage du clavier.

swift
// Activer Keyboard Layout Guide (iOS 15+)
scrollView.keyboardLayoutGuide.followsUndockedKeyboard = true

// Fixer la contrainte inférieure au sommet du clavier
contentView.bottomAnchor.constraint(
    equalTo: scrollView.keyboardLayoutGuide.topAnchor
).isActive = true

followsUndockedKeyboard est une propriété qui détermine si le guide doit répondre à un clavier pouvant être détaché du bord inférieur (sur iPad). Définissez-la sur true uniquement si l’interface fonctionne correctement avec un clavier flottant. Pour iPhone, cette propriété est ignorée — le clavier est toujours fixé au bord inférieur.

UIScrollView et le clavier

UIScrollView est un conteneur qu’Apple recommande d’utiliser comme base pour Keyboard Avoidance. Lorsque le clavier apparaît, la vue de défilement augmente son contentInset.bottom, permettant de faire défiler le contenu vers le haut et de rendre le champ actif visible.

La méthode clé est scrollRectToVisible, qui fait défiler programmatiquement la vue de défilement pour que le rectangle spécifié (le champ de texte actif) se trouve dans la zone visible. Combiner la modification du contentInset avec un appel à scrollRectToVisible garantit que le champ est non seulement découvert mais aussi positionné dans la partie supérieure de la zone visible.

swift
func adjustScrollForKeyboard(
    keyboardHeight: CGFloat,
    activeField: UIView
) {
    scrollView.contentInset.bottom = keyboardHeight
    scrollView.verticalScrollIndicatorInsets.bottom = keyboardHeight
    
    var visibleRect = view.frame
    visibleRect.size.height -= keyboardHeight
    
    if activeField.frame.origin.y > visibleRect.maxY {
        scrollView.scrollRectToVisible(
            activeField.frame, animated: true
        )
    }
}

Pour UIViewController avec UITableView, Apple recommande d’utiliser UITableViewController, qui ajuste automatiquement le contentInset lors de l’apparition du clavier. Si vous utilisez UIViewController avec une table ajoutée, vous devrez implémenter Keyboard Avoidance manuellement — UITableViewController ne fournit pas ce comportement pour les contrôleurs personnalisés.

Auto Layout et Keyboard Avoidance

Auto Layout permet d’implémenter Keyboard Avoidance sans programmer d’animations — il suffit de modifier l’activité (isActive) d’une contrainte spécifique ou de mettre à jour sa constante en réponse à une notification du clavier.

Un schéma typique : créer une IBOutlet NSLayoutConstraint pour la marge inférieure de la vue de défilement ou du contenu, et dans le gestionnaire keyboardWillShow définir constraint.constant = keyboardHeight, et dans keyboardWillHide la réinitialiser à 0. Mettez à jour la mise en page via layoutIfNeeded dans un bloc animate pour une transition fluide.

ApprocheVersion iOSComplexitéRecommandation
Keyboard NotificationsiOS 3.0+MoyennePour prendre en charge les anciennes versions
UIScrollView + contentInsetiOS 2.0+FaibleApproche universelle, Apple recommande
Keyboard Layout GuideiOS 15+MinimaleApproche moderne (iOS 15+)
IQKeyboardManageriOS 8.0+ZéroSolution rapide, bibliothèque populaire

Lors de l’utilisation de UIStackView, la modification des contraintes de marge inférieure fonctionne également : la vue en pile redistribue les éléments enfants automatiquement. Cependant, si la vue en pile se trouve à l’intérieur d’un UIScrollView, il est préférable de gérer le contentInset de la vue de défilement elle-même, plutôt que les contraintes à l’intérieur de celle-ci.

Solutions tierces pour Keyboard Avoidance

IQKeyboardManager est la bibliothèque la plus populaire (plus de 16 000 étoiles sur GitHub) qui implémente le Keyboard Avoidance automatique sans une seule ligne de code dans le contrôleur. Elle utilise le method swizzling pour suivre les champs de texte et élève automatiquement le contenu lors de l’apparition du clavier.

La bibliothèque offre des paramètres flexibles : vous pouvez spécifier la distance entre le champ et le clavier, activer/désactiver pour des contrôleurs spécifiques et configurer le comportement pour UITextView et les vues de saisie personnalisées. Cependant, le method swizzling peut entrer en conflit avec d’autres bibliothèques, et Apple ne recommande pas cette approche pour le code de production en raison d’effets secondaires imprévisibles.

Les alternatives incluent TPKeyboardAvoiding (une bibliothèque légère, ~2 000 étoiles) et KeyboardManager de la communauté. Pour les projets modernes, Apple recommande d’utiliser les outils intégrés d’iOS 15+, et pour les projets avec une version minimale inférieure — UIScrollView avec contentInset, qui est la solution intégrée la plus fiable.

Questions fréquentes

Qu’est-ce que Keyboard Avoidance sur iOS ?

Keyboard Avoidance est une technique de décalage de l’interface lors de l’apparition du clavier, afin que le champ de texte actif reste visible. Elle est implémentée via UIScrollView, Keyboard Notifications ou Keyboard Layout Guide iOS 15+ pour l’adaptation automatique de la mise en page.

Comment implémenter Keyboard Avoidance sans UIScrollView ?

Vous pouvez modifier le frame de la vue principale lors de l’apparition du clavier, en réduisant sa hauteur de la hauteur du clavier. Utilisez UIKeyboardWillShowNotification et UIKeyboardWillHideNotification pour mettre à jour le frame dans un bloc d’animation avec les paramètres du userInfo de la notification.

Comment fonctionne keyboardLayoutGuide ?

keyboardLayoutGuide est un UILayoutGuide qui est ajouté à un UIScrollView (iOS 15+). Il suit automatiquement le bord supérieur du clavier et met à jour sa NSLayoutConstraint lors de l’apparition et du masquage du clavier, en synchronisant l’animation avec le clavier système.

Quelles bibliothèques tierces existent pour Keyboard Avoidance ?

IQKeyboardManager est la plus populaire, ne nécessite aucun code. TPKeyboardAvoiding est une alternative légère. Pour les nouveaux projets, les outils intégrés d’iOS 15+ sont préférables, car les bibliothèques tierces utilisent le method swizzling, qu’Apple ne recommande pas.

Comment désactiver Keyboard Avoidance pour un écran spécifique ?

Si vous utilisez IQKeyboardManager, appelez enabled = false pour le UIViewController spécifique. Pour une implémentation manuelle, ne vous abonnez tout simplement pas aux notifications du clavier sur cet écran ou réinitialisez le contentInset à zéro lors de l’apparition du clavier.

Résumé

  • Keyboard Avoidance — une technique essentielle pour les applications iOS avec saisie de texte, empêchant les champs d’être recouverts par le clavier.
  • UIKeyboardWillShowNotification et UIKeyboardWillHideNotification — API classique pour la gestion manuelle du décalage du contenu.
  • UIScrollView avec contentInset et scrollRectToVisible — une solution universelle recommandée par Apple.
  • Keyboard Layout Guide (iOS 15+) — une approche moderne sans notifications manuelles, utilisant Auto Layout.
  • Les contraintes Auto Layout avec mise à jour de la constante dans un bloc d’animation assurent une transition fluide du contenu.
  • IQKeyboardManager — une bibliothèque tierce populaire pour une implémentation rapide, mais avec des limitations de method swizzling.
  • Apple recommande UIScrollView avec keyboardLayoutGuide pour les projets avec iOS 15+ et contentInset pour les projets avec des versions antérieures.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi