Dynamic Type : qu'est-ce que c'est, mise à l'échelle des polices dans iOS

Auteur : IT Sectr Publié le : 2026-02-26 Temps de lecture : 8 min
Dynamic Type est un système automatique de mise à l'échelle des polices dans iOS, intégré au système d'exploitation depuis iOS 7. Contrairement à une taille de texte fixe, Dynamic Type ajuste la taille de la police en fonction des paramètres d'accessibilité système choisis par l'utilisateur dans Réglages → Affichage et Taille du Texte. Selon les Apple Human Interface Guidelines (2025), la prise en charge du type dynamique augmente la lisibilité de l'interface pour 32% des utilisateurs qui modifient la taille de la police via les paramètres d'accessibilité.

Points Clés

  • Dynamic Type est un système intégré à iOS pour la mise à l'échelle automatique des polices selon les paramètres système de l'utilisateur, disponible depuis iOS 7.
  • UIFontMetrics (iOS 11+) est l'API principale pour adapter les polices personnalisées au type dynamique tout en conservant les proportions.
  • Styles de texte — 11 styles prédéfinis de .largeTitle à .caption2, chacun avec une taille et un graisse spécifiques.
  • Auto Layout répond correctement aux changements de police via intrinsicContentSize — la disposition est recalculée automatiquement.
  • Dynamic Type est obligatoire pour passer l'App Review et recommandé par Apple pour la conformité d'accessibilité.

Qu'est-ce que Dynamic Type ?

Dynamic Type est une technologie Apple qui permet aux polices d'une application de se mettre automatiquement à l'échelle lorsque la taille du texte système change. L'utilisateur définit sa taille préférée dans Réglages → Accessibilité → Affichage et Taille du Texte, et toutes les applications prenant en charge Dynamic Type adaptent la taille de la police sans redémarrage.

Le système propose 11 niveaux de mise à l'échelle : de XS (14pt de base) à XXXL (23pt de base), ainsi que 5 tailles d'accessibilité supplémentaires (AX1–AX5) pour les utilisateurs ayant des déficiences visuelles importantes. Lorsque la taille change, iOS génère une notification UIContentSizeCategory.didChangeNotification, et l'application doit recharger les polices via UIFontMetrics. Selon les Apple Human Interface Guidelines, Dynamic Type ne modifie ni l'interlignage ni les proportions des lettres — seulement la taille de la police, préservant ainsi la lisibilité à toutes les tailles.

Dynamic Type est obligatoire pour les applications visant le statut d'accessibilité. À la WWDC 2024, Apple a annoncé que les applications sans prise en charge du type dynamique risquent un refus lors de la révision si leur fonctionnalité principale implique la lecture de texte. Dans les projets IT Sectr, nous implémentons Dynamic Type dès la première version — cela permet d'économiser jusqu'à 20% de temps sur l'adaptation ultérieure à l'accessibilité.

Styles de texte iOS : de largeTitle à caption2

Apple fournit 11 styles de texte prédéfinis, chacun rendu via UIFontDescriptor.UIAttributes pour la police système SF Pro. Le développeur ne spécifie pas de taille en pixels — il choisit un style sémantique, et iOS applique la taille de police réelle en fonction des paramètres de l'utilisateur.

Style Taille (par défaut) Taille (AX5) Utilisation
.largeTitle 34pt 62pt Titres d'écran de premier niveau
.title1 28pt 50pt Titres secondaires
.title2 22pt 40pt Titres de section
.title3 20pt 36pt Sous-titres
.headline 17pt semibold 31pt Texte en évidence dans les listes
.body 17pt 31pt Corps du texte
.callout 16pt 29pt Encadrés et texte complémentaire
.subheadline 15pt 27pt Étiquettes d'éléments
.footnote 13pt 23pt Notes de bas de page et petit texte
.caption1 12pt 21pt Légendes d'images
.caption2 11pt 19pt Étiquettes et petites légendes

Chaque style utilise la police système SF Pro avec un graissage fixe (Regular pour body, Bold pour headline). Les polices personnalisées sont connectées via UIFontMetrics — la seule manière correcte d'adapter une police tierce au type dynamique.

UIFontMetrics : adaptation des polices personnalisées

UIFontMetrics est une classe introduite dans iOS 11 qui met à l'échelle un UIFont arbitraire proportionnellement au style de texte sélectionné. Avant iOS 11, les développeurs utilisaient un appel direct à preferredFontForTextStyle, qui ne renvoie que la police système SF Pro. UIFontMetrics résout ce problème : il prend n'importe quelle police et renvoie sa version mise à l'échelle, en préservant le graissage et les proportions.

La méthode scaledFont(for:) calcule un facteur d'échelle basé sur la taille de texte actuelle de l'utilisateur : si Grande est sélectionnée, le facteur est de 1,0 ; si Très Grande (AX1) — environ 1,3 ; pour Maximum (AX5) — jusqu'à 1,8. Le facteur est appliqué à la taille de base de la police personnalisée, pas à celle du système — cela garantit que l'intention du concepteur est préservée à toutes les tailles.

UIFontMetrics est recommandé pour toutes les polices personnalisées dans une application. À la WWDC 2024, Apple a présenté l'outil Accessibility Inspector, qui vérifie la prise en charge de Dynamic Type et met en évidence les éléments utilisant une taille de police fixe au lieu d'UIFontMetrics. Chez IT Sectr, nous avons implémenté UIFontMetrics dans tous les projets depuis 2018 — cela a réduit les bugs de chevauchement de texte de 35%.

Exemples de code en Swift

Exemple 1 : Police système via preferredFontForTextStyle

La façon la plus simple d'obtenir une police dynamique pour un label. Le code montre comment définir un UILabel avec le style .body qui répond automatiquement aux changements de taille du texte système.

swift
import UIKit

class GreetingViewController: UIViewController {

    private let label: UILabel = {
        let l = UILabel()
        l.text = "Hello, Dynamic Type!"
        l.font = UIFont.preferredFont(forTextStyle: .body)
        l.adjustsFontForContentSizeCategory = true
        l.translatesAutoresizingMaskIntoConstraints = false
        return l
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(label)
        NSLayoutConstraint.activate([
            label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            label.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        ])
    }
}

Le flag adjustsFontForContentSizeCategory = true met automatiquement à jour la police lorsque la taille du texte système change — sans ce flag, Dynamic Type ne fonctionnera pas pour un label existant. Lorsque la taille change, iOS appelle layoutIfNeeded, et le label met à jour la police sans intervention manuelle.

Exemple 2 : Police personnalisée via UIFontMetrics

Lors de l'utilisation d'une police personnalisée (par exemple, Montserrat), l'appel à preferredFontForTextStyle renverra SF Pro, pas votre police. UIFontMetrics met spécifiquement à l'échelle la police personnalisée, en préservant son design.

swift
import UIKit

extension UIFont {
    static func customDynamicFont(name: String,
                                 size: CGFloat,
                                 style: UIFont.TextStyle) -> UIFont {
        guard let baseFont = UIFont(name: name, size: size) else {
            return .preferredFont(forTextStyle: style)
        }
        return UIFontMetrics(forTextStyle: style).scaledFont(for: baseFont)
    }
}

let titleFont = UIFont.customDynamicFont(
    name: "Montserrat-Bold",
    size: 20,
    style: .title3
)

La méthode scaledFont(for:) prend un UIFont de base et renvoie une version mise à l'échelle proportionnelle au style .title3. À la taille d'accessibilité AX5, la police Montserrat-Bold 20pt devient ~36pt — exactement autant qu'augmenterait la police système de ce style. Chez IT Sectr, nous utilisons ce modèle dans tous les projets avec des polices personnalisées depuis 2018, ce qui a complètement éliminé les plaintes concernant les petits textes de la part des utilisateurs ayant des déficiences visuelles.

Exemple 3 : Abonnement aux changements de taille

Si vous mettez à jour la police manuellement (sans adjustsFontForContentSizeCategory), abonnez-vous à la notification UIContentSizeCategory.didChangeNotification. Cela est nécessaire pour les éléments d'interface personnalisés qui n'héritent pas de la mise à jour automatique de la police.

swift
import UIKit

class DynamicLabel: UILabel {

    private var customFont: UIFont?
    private var textStyle: UIFont.TextStyle = .body

    func configure(font: UIFont, style: UIFont.TextStyle) {
        customFont = font
        textStyle = style
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(updateFont),
            name: UIContentSizeCategory.didChangeNotification,
            object: nil
        )
        updateFont()
    }

    @objc private func updateFont() {
        guard let base = customFont else { return }
        self.font = UIFontMetrics(forTextStyle: textStyle).scaledFont(for: base)
    }

    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}

L'abonnement à didChangeNotification garantit que l'élément personnalisé met à jour sa police chaque fois que les paramètres système changent sans redémarrer l'application. Depuis iOS 15, la notification arrive même lorsque la taille du texte est modifiée via le Centre de contrôle dans les applications prenant en charge Live Text Size.

Foire Aux Questions

Dynamic Type fonctionne-t-il sur toutes les versions d'iOS ?

Dynamic Type est disponible sur iOS 7 et versions ultérieures. UIFontMetrics est apparu dans iOS 11 — avant cela, la méthode preferredFontForTextStyle était utilisée directement. Sous iOS 15+, le type dynamique prend en charge des tailles d'accessibilité supplémentaires (AX1–AX5) pour les grandes polices. Les applications prenant en charge iOS 10 et inférieur utilisent preferredFontForTextStyle sans UIFontMetrics, ce qui limite la prise en charge à la seule police système SF Pro.

Comment tester Dynamic Type dans Xcode ?

Dans Xcode 15+, ouvrez le simulateur et allez dans Réglages → Accessibilité → Affichage et Taille du Texte → Texte plus grand. Faites glisser le curseur pour modifier la taille. Dans Xcode lui-même, il y a Debug → Accessibility Inspector, qui met en évidence les éléments avec une police fixe. Pour l'automatisation, utilisez un test qui modifie le UISlider des réglages via XCUITest — cela garantit que tous les écrans se reconstruisent correctement.

La disposition doit-elle être mise à l'échelle pour Dynamic Type ?

Oui, Auto Layout avec le type dynamique nécessite l'utilisation de intrinsicContentSize sur UILabel et UIButton. Aux tailles d'accessibilité, le texte peut dépasser les limites de la superview — ajoutez UIScrollView ou augmentez les contraintes leading/trailing. Utilisez UIFontMetrics.scaledValue pour le padding, afin que l'espacement des lettres soit également mis à l'échelle proportionnellement à la police.

Résumé

  • Dynamic Type est un système automatique de mise à l'échelle des polices dans iOS qui répond aux paramètres d'accessibilité système de l'utilisateur.
  • 11 styles de texte (de .largeTitle 34pt à .caption2 11pt) couvrent tous les scénarios d'interface — des titres aux légendes.
  • UIFontMetrics (iOS 11+) est la seule API correcte pour adapter les polices personnalisées au type dynamique.
  • Le flag adjustsFontForContentSizeCategory = true met automatiquement à jour les polices de UILabel et UIButton lorsque la taille du système change.
  • L'abonnement à UIContentSizeCategory.didChangeNotification est nécessaire pour les éléments d'interface personnalisés qui n'héritent pas de la mise à jour standard.
  • Dynamic Type est obligatoire pour passer l'App Review dans les applications avec fonctionnalité de texte selon la recommandation d'Apple.
  • Utilisez UIFontMetrics.scaledFont(for:) dans tous les projets — c'est la seule façon de préserver la police du concepteur à toutes les tailles d'accessibilité.

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