Dynamic Type: bu nədir, iOS-da şrift miqyaslandırma

Müəllif: IT Sectr Dərc olunub: 2026-02-26 Oxuma vaxtı: 8 dəq
Dynamic Type — iOS 7 versiyasından etibarən əməliyyat sisteminə daxil edilmiş avtomatik şrift miqyaslandırma sistemidir. Sabit mətn ölçüsündən fərqli olaraq, Dynamic Type istifadəçinin Settings → Display & Text Size bölməsində seçdiyi sistem əlçatanlıq parametrlərinə uyğun olaraq şrift ölçüsünü tənzimləyir. Apple Human Interface Guidelines (2025) məlumatına görə, dinamik tip dəstəyi əlçatanlıq parametrlərində şrift ölçüsünü dəyişən istifadəçilərin 32% üçün interfeysin oxunaqlılığını artırır.

Əsas məqamlar

  • Dynamic Type — iOS 7-dən etibarən mövcud olan, şriftləri istifadəçinin sistem parametrlərinə uyğun avtomatik miqyaslandıran daxili iOS sistemidir.
  • UIFontMetrics (iOS 11+) — xüsusi şriftlərin dinamik tipə nisbətləri qoruyaraq uyğunlaşdırılması üçün əsas API-dir.
  • Mətn stilistikası — .largeTitle-dən .caption2-yə qədər 11 əvvəlcədən təyin edilmiş stil, hər biri müəyyən ölçü və xətt ilə.
  • Auto Layout intrinsicContentSize vasitəsilə şrift dəyişikliklərinə düzgün reaksiya verir — layout avtomatik yenidən hesablanır.
  • Dynamic Type App Review-dən keçmək üçün məcburidir və Apple tərəfindən accessibility-compliance üçün tövsiyə olunur.

Dynamic Type nədir?

Dynamic Type — sistem mətn ölçüsü dəyişdikdə tətbiq şriftlərinin avtomatik miqyaslanmasını təmin edən Apple texnologiyasıdır. İstifadəçi parametrlər → Əlçatanlıq → Ekran və mətn ölçüsü bölməsində istədiyi ölçünü seçir və Dynamic Type-i dəstəkləyən bütün tətbiqlər şrift ölçüsünü yenidən başlamadan uyğunlaşdırır.

Sistem 11 miqyaslandırma pilləsi təklif edir: XS (14pt əsas) ilə XXXL (23pt əsas) arasında, həmçinin görmə qüsuru olan istifadəçilər üçün 5 əlavə əlçatanlıq ölçüsü (AX1–AX5). Ölçü dəyişdikdə iOS UIContentSizeCategory.didChangeNotification bildirişi yaradır və tətbiq UIFontMetrics vasitəsilə şriftləri yenidən oxumalıdır. Apple Human Interface Guidelines-ə görə, Dynamic Type sətirarası intervalı və hərf nisbətlərini dəyişmir — yalnız şrift ölçüsünü dəyişir, bu da bütün ölçülərdə oxunaqlılığı qoruyur.

Dynamic Type əlçatan (accessibility) statusu üçün müraciət edən tətbiqlər üçün məcburidir. WWDC 2024-də Apple elan etdi ki, dinamik tip dəstəyi olmayan tətbiqlər, əsas funksionallığı mətn oxumaqla bağlıdırsa, rədd riski ilə üzləşir. IT Sectr layihələrində Dynamic Type-i ilk versiyadan tətbiq edirik — bu, sonradan əlçatanlığa uyğunlaşma üçün 20% vaxta qənaət edir.

iOS mətn stilləri: largeTitle-dən caption2-yə

Apple sistem şrifti SF Pro üçün UIFontDescriptor.UIAttributes-də göstərilən 11 əvvəlcədən təyin edilmiş mətn stili təqdim edir. Tərtibatçı piksel ölçüsünü təyin etmir — semantik stil seçir, iOS isə istifadəçinin parametrlərindən asılı olaraq müvafiq şrift ölçüsünü tətbiq edir.

Stil Ölçü (default) Ölçü (AX5) Təyinat
.largeTitle 34pt 62pt Birinci səviyyə ekran başlıqları
.title1 28pt 50pt İkinci dərəcəli başlıqlar
.title2 22pt 40pt Bölmə başlıqları
.title3 20pt 36pt Alt başlıqlar
.headline 17pt semibold 31pt Siyahılarda vurğulanmış mətn
.body 17pt 31pt Əsas mətn
.callout 16pt 29pt Qeydlər və əlavə mətn
.subheadline 15pt 27pt Element izahları
.footnote 13pt 23pt Qeydlər və kiçik mətn
.caption1 12pt 21pt Şəkil izahları
.caption2 11pt 19pt Etiketlər və kiçik izahlar

Hər bir stil sabit xəttli (body üçün Regular, headline üçün Bold) sistem şrifti SF Pro-dan istifadə edir. Xüsusi şriftlər UIFontMetrics vasitəsilə qoşulur — xarici şrifti dinamik tipə uyğunlaşdırmağın yeganə düzgün yolu.

UIFontMetrics: xüsusi şriftlərin uyğunlaşdırılması

UIFontMetrics — iOS 11-də təqdim edilmiş, istənilən UIFont-u seçilmiş mətn stilinə nisbətən miqyaslandıran sinifdir. iOS 11-dən əvvəl tərtibatçılar yalnız sistem şrifti SF Pro-nu qaytaran preferredFontForTextStyle-dən istifadə edirdilər. UIFontMetrics bu problemi həll edir: istənilən şrifti qəbul edir və onun miqyaslandırılmış versiyasını qaytarır, xətt və nisbətləri qoruyur.

scaledFont(for:) metodu istifadəçinin cari mətn ölçüsünə əsasən miqyaslandırma əmsalını hesablayır: "Böyük" (Large) ölçüsü seçilərsə, əmsal 1.0; "Çox böyük" (AX1) — təxminən 1.3; "Maksimum" (AX5) — 1.8-ə qədər. Əmsal sistem şriftinə deyil, xüsusi şriftin əsas ölçüsünə tətbiq olunur — bu, dizaynerin fikrinin bütün ölçülərdə qorunmasını təmin edir.

UIFontMetrics tətbiqdəki bütün xüsusi şriftlər üçün istifadə edilməsi tövsiyə olunur. WWDC 2024-də Apple Dynamic Type dəstəyini yoxlayan və sabit ölçülü elementləri vurğulayan Accessibility Inspector alətini göstərdi. IT Sectr-də 2018-ci ildən bəri bütün layihələrdə UIFontMetrics tətbiq etdik — bu, üst-üstə düşən mətn səhvlərinin sayını 35% azaltdı.

Swift-də kod nümunələri

Nümunə 1: preferredFontForTextStyle vasitəsilə sistem şrifti

Etiket üçün dinamik şrift əldə etməyin ən sadə yolu. Kod sistem mətn ölçüsünün dəyişməsinə avtomatik reaksiya verən .body stili ilə UILabel-in necə qurulduğunu göstərir.

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

adjustsFontForContentSizeCategory = true bayrağı sistem mətn ölçüsü dəyişdikdə şrifti avtomatik yeniləyir — bu bayraq olmadan Dynamic Type mövcud etiket üçün işləməyəcək. Ölçü dəyişdikdə iOS layoutIfNeeded çağırır və label əl ilə müdaxilə olmadan şrifti yeniləyir.

Nümunə 2: UIFontMetrics vasitəsilə xüsusi şrift

Xüsusi şrift (məsələn, Montserrat) istifadə edərkən preferredFontForTextStyle çağırışı sizin şriftinizi deyil, SF Pro-nu qaytaracaq. UIFontMetrics məhz xüsusi şrifti miqyaslandırır, onun dizaynını qoruyur.

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
)

scaledFont(for:) metodu əsas UIFont-u qəbul edir və .title3 stilinə nisbətən miqyaslandırılmış versiyanı qaytarır. AX5 əlçatanlıq ölçüsündə Montserrat-Bold 20pt şrifti ~36pt-ə çevrilir — bu stil üçün sistem şriftinin artdığı qədər. IT Sectr-də 2018-ci ildən bəri xüsusi şriftləri olan bütün layihələrdə bu nümunədən istifadə edirik ki, bu da görmə məhdudiyyəti olan istifadəçilərdən kiçik mətnlə bağlı şikayətləri tamamilə aradan qaldırdı.

Nümunə 3: Ölçü dəyişikliyinə abunə olma

Şrifti əl ilə yeniləyirsinizsə (adjustsFontForContentSizeCategory olmadan), UIContentSizeCategory.didChangeNotification bildirişinə abunə olun. Bu, avtomatik şrift yeniləməsini miras almayan xüsusi UI elementləri üçün lazımdır.

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

didChangeNotification-a abunə olmaq, xüsusi elementin tətbiqi yenidən başlatmadan sistem parametrlərinin istənilən dəyişməsində şrifti yeniləməsini təmin edir. iOS 15-dən etibarən bildiriş Live Text Size-i dəstəkləyən tətbiqlərdə Control Center vasitəsilə mətn ölçüsü dəyişdikdə belə gəlir.

Tez-tez verilən suallar

Dynamic Type iOS-un bütün versiyalarında işləyir?

Dynamic Type iOS 7 və daha yeni versiyalarda mövcuddur. UIFontMetrics iOS 11-də ortaya çıxdı — ondan əvvəl birbaşa preferredFontForTextStyle metodundan istifadə olunurdu. iOS 15+-da dinamik tip böyük şriftlər üçün əlavə əlçatanlıq ölçülərini (AX1–AX5) dəstəkləyir. iOS 10 və daha köhnə versiyaları dəstəkləyən tətbiqlər UIFontMetrics olmadan preferredFontForTextStyle istifadə edir ki, bu da dəstəyi yalnız sistem şrifti SF Pro ilə məhdudlaşdırır.

Xcode-da Dynamic Type-i necə test etmək olar?

Xcode 15+-da simulyatoru açın və Settings → Accessibility → Display & Text Size → Larger Text seçin. Ölçüsü dəyişmək üçün sürüşdürücünü dartın. Xcode-un özündə Debug → Accessibility Inspector var, o sabit şriftli elementləri vurğulayır. Avtomatlaşdırma üçün XCUITest vasitəsilə parametrlərin UISliderını dəyişən testdən istifadə edin — bu, bütün ekranların düzgün yenidən qurulmasını təmin edir.

Layout-u Dynamic Type-ə uyğun miqyaslandırmaq lazımdır?

Bəli, dinamik tipli Auto Layout UILabel və UIButton-da intrinsicContentSize istifadəsini tələb edir. Əlçatanlıq ölçülərində mətn superview-in hüdudlarından kənara çıxa bilər — UIScrollView əlavə edin və ya leading/trailing məhdudiyyətlərini artırın. Boşluqlar (padding) üçün UIFontMetrics.scaledValue istifadə edin ki, hərf arası intervallar da şriftə nisbətən miqyaslansın.

Nəticə

  • Dynamic Type — istifadəçinin sistem əlçatanlıq parametrlərinə reaksiya verən iOS-da avtomatik şrift miqyaslandırma sistemi.
  • 11 mətn stili (.largeTitle 34pt-dən .caption2 11pt-yə qədər) interfeysin bütün ssenarilərini əhatə edir — başlıqlardan izahatlara qədər.
  • UIFontMetrics (iOS 11+) — xüsusi şriftlərin dinamik tipə uyğunlaşdırılması üçün yeganə düzgün API.
  • adjustsFontForContentSizeCategory = true bayrağı sistem ölçüsü dəyişdikdə UILabel və UIButton şriftini avtomatik yeniləyir.
  • UIContentSizeCategory.didChangeNotification-a abunə olmaq standart yeniləməni miras almayan xüsusi UI elementləri üçün lazımdır.
  • Dynamic Type Apple tövsiyəsinə əsasən mətn funksionallığı olan tətbiqlərdə App Review-dən keçmək üçün məcburidir.
  • Bütün layihələrdə UIFontMetrics.scaledFont(for:) istifadə edin — bütün əlçatanlıq ölçülərində dizayner şriftini qorumağın yeganə yolu budur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun