Dynamic Type: mi ez, betűméretezés iOS-ben

Szerző: IT Sectr Megjelenés: 2026-02-26 Olvasási idő: 8 perc
Dynamic Type — egy automatikus betűméret-skálázó rendszer iOS-ben, amely az iOS 7 verzió óta beépítve van az operációs rendszerbe. A rögzített szövegmérettől eltérően a Dynamic Type a felhasználó által a Settings → Display & Text Size menüpontban kiválasztott rendszer-hozzáférhetőségi beállításokhoz igazítja a betűméretet. Az Apple Human Interface Guidelines (2025) szerint a dinamikus típus támogatása 32%-kal növeli a felület olvashatóságát azoknál a felhasználóknál, akik a kisegítő lehetőségek beállításain keresztül módosítják a betűméretet.

Főbb pontok

  • Dynamic Type — beépített iOS-rendszer a betűtípusok automatikus skálázására a felhasználó rendszerbeállításai szerint, elérhető iOS 7-től.
  • UIFontMetrics (iOS 11+) — a fő API az egyedi betűtípusok dinamikus típushoz való igazításához az arányok megtartásával.
  • Szövegstilisztika — 11 előre meghatározott stílus a .largeTitle-től a .caption2-ig, mindegyik meghatározott mérettel és alakkal.
  • Az Auto Layout helyesen reagál a betűtípus-változtatásokra az intrinsicContentSize-on keresztül — a layout automatikusan újraszámolódik.
  • A Dynamic Type kötelező az App Review áteresztéséhez, és az Apple ajánlja az akadálymentesítési megfeleléshez.

Mi az a Dynamic Type?

Dynamic Type — az Apple technológiája, amely lehetővé teszi az alkalmazás betűtípusainak automatikus skálázását a rendszer szövegméretének változásakor. A felhasználó a Settings → Accessibility → Display & Text Size menüpontban állítja be a kívánt méretet, és az összes Dynamic Type-ot támogató alkalmazás újraindítás nélkül igazítja a betűméretet.

A rendszer 11 skálázási szintet kínál: XS (14pt alap) és XXXL (23pt alap) között, valamint 5 további akadálymentesítési méretet (AX1–AX5) a súlyos látássérült felhasználók számára. Méretváltozáskor az iOS létrehozza az UIContentSizeCategory.didChangeNotification értesítést, és az alkalmazásnak újra be kell töltenie a betűtípusokat az UIFontMetrics segítségével. Az Apple Human Interface Guidelines szerint a Dynamic Type nem változtatja meg a sorközt és a betűarányokat — csak a betűméretet, ami megőrzi az olvashatóságot minden méreten.

A Dynamic Type kötelező az akadálymentesített (accessibility) státuszra pályázó alkalmazások számára. A WWDC 2024-en az Apple bejelentette, hogy a dinamikus típust nem támogató alkalmazások elutasítás kockázatának vannak kitéve a felülvizsgálat során, ha fő funkciójuk szövegolvasáshoz kapcsolódik. Az IT Sectr projektjeiben az első verziótól kezdve implementáljuk a Dynamic Type-ot — ez akár 20%-os időmegtakarítást jelent a későbbi akadálymentesítési adaptáció során.

iOS szövegstílusok: largeTitle-től caption2-ig

Az Apple 11 előre meghatározott szövegstílust biztosít, amelyek mindegyike az UIFontDescriptor.UIAttributes-ben jelenik meg az SF Pro rendszerbetűtípushoz. A fejlesztő nem pixelméretet ad meg — szemantikai stílust választ, az iOS pedig a felhasználó beállításaitól függően alkalmazza a megfelelő betűméretet.

Stílus Méret (alapértelmezett) Méret (AX5) Rendeltetés
.largeTitle 34pt 62pt Első szintű képernyőcímek
.title1 28pt 50pt Másodlagos címek
.title2 22pt 40pt Szekciócímek
.title3 20pt 36pt Alcímek
.headline 17pt semibold 31pt Kiemelt szöveg listákban
.body 17pt 31pt Fő szöveg
.callout 16pt 29pt Kiemelések és kiegészítő szöveg
.subheadline 15pt 27pt Elemleírások
.footnote 13pt 23pt Lábjegyzetek és kis szöveg
.caption1 12pt 21pt Képleírások
.caption2 11pt 19pt Címkék és kis leírások

Minden stílus az SF Pro rendszerbetűtípust használja rögzített alakkal (Regular a body-hoz, Bold a headline-hoz). Az egyedi betűtípusok az UIFontMetrics segítségével csatlakoztathatók — ez az egyetlen helyes módja a harmadik féltől származó betűtípus dinamikus típushoz való igazításának.

UIFontMetrics: egyedi betűtípusok igazítása

UIFontMetrics — az iOS 11-ben bevezetett osztály, amely bármely UIFont-ot arányosan skálázza a kiválasztott szövegstílushoz. Az iOS 11 előtt a fejlesztők közvetlenül a preferredFontForTextStyle hívást használták, amely csak az SF Pro rendszerbetűtípust adja vissza. Az UIFontMetrics megoldja ezt a problémát: bármilyen betűtípust elfogad, és visszaadja annak skálázott változatát, megtartva az alakot és az arányokat.

A scaledFont(for:) metódus kiszámítja a skálázási tényezőt a felhasználó aktuális szövegmérete alapján: ha a „Nagy" (Large) méret van kiválasztva, a tényező 1.0; ha „Nagyon nagy" (AX1) — körülbelül 1.3; a „Maximális" (AX5) esetén — 1.8-ig. A tényező az egyedi betűtípus alapméretére vonatkozik, nem a rendszerbetűtípusra — ez garantálja, hogy a tervezői szándék minden méreten megmaradjon.

Az UIFontMetrics használata ajánlott az alkalmazás összes egyedi betűtípusához. A WWDC 2024-en az Apple bemutatta az Accessibility Inspector eszközt, amely ellenőrzi a Dynamic Type támogatást, és kiemeli azokat az elemeket, amelyek rögzített méretet használnak az UIFontMetrics helyett. Az IT Sectr-nél 2018 óta minden projektben bevezettük az UIFontMetrics-t — ez 35%-kal csökkentette az átfedő szöveggel kapcsolatos hibák számát.

Kódpéldák Swift-ben

1. példa: Rendszerbetűtípus a preferredFontForTextStyle segítségével

A legegyszerűbb módja a dinamikus betűtípus elérésének egy címke számára. A kód megmutatja, hogyan állítsunk be egy UILabel-t .body stílussal, amely automatikusan reagál a rendszer szövegméretének változására.

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),
        ])
    }
}

Az adjustsFontForContentSizeCategory = true jelző automatikusan frissíti a betűtípust a rendszer szövegméretének változásakor — e jelző nélkül a Dynamic Type nem működik a meglévő címkénél. Méretváltozáskor az iOS meghívja a layoutIfNeeded-et, és a label kézi beavatkozás nélkül frissíti a betűtípust.

2. példa: Egyedi betűtípus az UIFontMetrics segítségével

Egyedi betűtípus (pl. Montserrat) használatakor a preferredFontForTextStyle hívás SF Pro-t ad vissza, nem a saját betűtípusát. Az UIFontMetrics pontosan az egyedi betűtípust skálázza, megőrizve annak dizájnját.

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
)

A scaledFont(for:) metódus elfogad egy alap UIFont-ot, és visszaad egy, a .title3 stílushoz arányosan skálázott verziót. AX5 akadálymentesítési méretnél a Montserrat-Bold 20pt betűtípus ~36pt-ra változik — pontosan annyival nő, mint amennyivel a rendszerbetűtípus nőne ennél a stílusnál. Az IT Sectr-nél 2018 óta ezt a mintát használjuk minden egyedi betűtípust tartalmazó projektben, ami teljesen megszüntette a kis szöveggel kapcsolatos panaszokat a látássérült felhasználóktól.

3. példa: Feliratkozás a méretváltozásra

Ha manuálisan frissíti a betűtípust (adjustsFontForContentSizeCategory nélkül), iratkozzon fel az UIContentSizeCategory.didChangeNotification értesítésre. Ez szükséges az olyan egyedi UI-elemeknél, amelyek nem öröklik az automatikus betűtípus-frissítést.

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)
    }
}

A didChangeNotification-ra való feliratkozás garantálja, hogy az egyedi elem frissíti a betűtípust a rendszerbeállítások bármilyen változásakor, az alkalmazás újraindítása nélkül. Az iOS 15-től kezdve az értesítés akkor is érkezik, ha a szöveg méretét a Control Centeren keresztül változtatják meg a Live Text Size-t támogató alkalmazásokban.

Gyakran ismételt kérdések

A Dynamic Type működik az iOS összes verzióján?

A Dynamic Type iOS 7 és újabb verziókon érhető el. Az UIFontMetrics az iOS 11-ben jelent meg — előtte közvetlenül a preferredFontForTextStyle metódust használták. Az iOS 15+-on a dinamikus típus további akadálymentesítési méreteket (AX1–AX5) támogat a nagy betűtípusokhoz. Az iOS 10-et és régebbit támogató alkalmazások UIFontMetrics nélkül használják a preferredFontForTextStyle-t, ami a támogatást csak az SF Pro rendszerbetűtípusra korlátozza.

Hogyan teszteljük a Dynamic Type-ot Xcode-ban?

Az Xcode 15+-ban nyissa meg a szimulátort, és válassza a Settings → Accessibility → Display & Text Size → Larger Text menüpontot. Húzza el a csúszkát a méret megváltoztatásához. Magában az Xcode-ban található a Debug → Accessibility Inspector, amely kiemeli a rögzített betűtípusú elemeket. Az automatizáláshoz használjon egy tesztet, amely a beállítások UISliderét módosítja XCUITesten keresztül — ez garantálja, hogy az összes képernyő helyesen épül újjá.

Skálázni kell a layout-ot a Dynamic Type-hoz?

Igen, a dinamikus típusú Auto Layout megköveteli az intrinsicContentSize használatát az UILabel és UIButton esetében. Akadálymentesítési méreteknél a szöveg túlléphet a superview határain — adjon hozzá UIScrollView-t, vagy növelje a leading/trailing korlátozásokat. Használja az UIFontMetrics.scaledValue-t a kitöltésekhez (padding), hogy a betűk közötti távolság is arányosan skálázódjon a betűtípushoz.

Összefoglalás

  • Dynamic Type — automatikus betűméret-skálázó rendszer iOS-ben, amely a felhasználó kisegítő lehetőségeinek beállításaira reagál.
  • 11 szövegstílus (.largeTitle 34pt-től .caption2 11pt-ig) lefedi az összes interfész-forgatókönyvet — a címektől a leírásokig.
  • UIFontMetrics (iOS 11+) — az egyetlen helyes API az egyedi betűtípusok dinamikus típushoz való igazításához.
  • Az adjustsFontForContentSizeCategory = true jelző automatikusan frissíti az UILabel és UIButton betűtípusát a rendszer méretének változásakor.
  • Az UIContentSizeCategory.didChangeNotification-ra való feliratkozás szükséges az olyan egyedi UI-elemeknél, amelyek nem öröklik a szabványos frissítést.
  • A Dynamic Type kötelező az App Review áteresztéséhez a szöveges funkciókkal rendelkező alkalmazásokban az Apple ajánlása szerint.
  • Használja az UIFontMetrics.scaledFont(for:) metódust minden projektben — ez az egyetlen módja a tervezői betűtípus megőrzésének az összes akadálymentesítési méreten.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is