Dynamic Type: nedir, iOS'ta yazı tipi ölçekleme

Yazar: IT Sectr Yayınlanma: 2026-02-26 Okuma süresi: 8 dk
Dynamic Type, iOS 7'den itibaren işletim sistemine entegre edilmiş, iOS'ta otomatik yazı tipi ölçekleme sistemidir. Sabit metin boyutunun aksine, Dynamic Type, kullanıcının Ayarlar → Ekran ve Metin Boyutu bölümünde seçtiği sistem erişilebilirlik ayarlarına göre yazı tipi boyutunu ayarlar. Apple Human Interface Guidelines (2025)'a göre, dinamik tip desteği, erişilebilirlik ayarları aracılığıyla yazı tipi boyutunu değiştiren %32'lik kullanıcı için arayüz okunabilirliğini artırır.

Önemli Noktalar

  • Dynamic Type, kullanıcının sistem ayarlarına göre otomatik yazı tipi ölçekleme için iOS'a entegre edilmiş bir sistemdir, iOS 7'den beri kullanılabilir.
  • UIFontMetrics (iOS 11+), oranları koruyarak özel yazı tiplerini dinamik tipe uyarlamak için ana API'dir.
  • Metin stilleri — .largeTitle'dan .caption2'ye kadar 11 ön tanımlı stil, her biri belirli boyut ve ağırlıkta.
  • Auto Layout, intrinsicContentSize aracılığıyla yazı tipi değişikliklerine doğru şekilde yanıt verir — düzen otomatik olarak yeniden hesaplanır.
  • Dynamic Type, App Review'ı geçmek için zorunludur ve Apple tarafından erişilebilirlik uyumu için önerilir.

Dynamic Type Nedir?

Dynamic Type, sistem metin boyutu değiştiğinde uygulama yazı tiplerinin otomatik olarak ölçeklenmesini sağlayan bir Apple teknolojisidir. Kullanıcı, Ayarlar → Erişilebilirlik → Ekran ve Metin Boyutu'nda tercih ettiği boyutu belirler ve Dynamic Type'ı destekleyen tüm uygulamalar, yeniden başlatmadan yazı tipi boyutunu uyarlar.

Sistem 11 ölçekleme seviyesi sunar: XS'den (14pt taban) XXXL'ye (23pt taban) ve ayrıca ciddi görme engelli kullanıcılar için 5 ek erişilebilirlik boyutu (AX1–AX5). Boyut değiştiğinde, iOS bir UIContentSizeCategory.didChangeNotification bildirimi oluşturur ve uygulamanın UIFontMetrics aracılığıyla yazı tiplerini yeniden yüklemesi gerekir. Apple Human Interface Guidelines'a göre Dynamic Type, satır aralığını veya harf oranlarını değiştirmez — yalnızca yazı tipi boyutunu değiştirerek tüm boyutlarda okunabilirliği korur.

Dynamic Type, erişilebilirlik durumunu hedefleyen uygulamalar için zorunludur. WWDC 2024'te Apple, dinamik tip desteği olmayan uygulamaların, temel işlevleri metin okumayla ilgiliyse inceleme sırasında reddedilme riskiyle karşı karşıya olduğunu duyurdu. IT Sectr projelerinde, Dynamic Type'ı ilk sürümden itibaren uyguluyoruz — bu, sonraki erişilebilirlik uyarlamasında %20'ye varan zaman tasarrufu sağlar.

iOS Metin Stilleri: largeTitle'dan caption2'ye

Apple, sistem yazı tipi SF Pro için UIFontDescriptor.UIAttributes aracılığıyla 11 ön tanımlı metin stili sağlar. Geliştirici piksel boyutu belirtmez — anlamsal bir stil seçer ve iOS, kullanıcı ayarlarına göre gerçek yazı tipi boyutunu uygular.

Stil Boyut (varsayılan) Boyut (AX5) Kullanım
.largeTitle 34pt 62pt Birinci düzey ekran başlıkları
.title1 28pt 50pt İkincil başlıklar
.title2 22pt 40pt Bölüm başlıkları
.title3 20pt 36pt Alt başlıklar
.headline 17pt semibold 31pt Listelerde vurgulanan metin
.body 17pt 31pt Gövde metni
.callout 16pt 29pt Belirteçler ve tamamlayıcı metin
.subheadline 15pt 27pt Öğe etiketleri
.footnote 13pt 23pt Dipnotlar ve küçük metin
.caption1 12pt 21pt Görsel altyazıları
.caption2 11pt 19pt Etiketler ve küçük altyazılar

Her stil, sabit ağırlıkta sistem yazı tipi SF Pro'yu kullanır (body için Regular, headline için Bold). Özel yazı tipleri UIFontMetrics aracılığıyla bağlanır — üçüncü taraf bir yazı tipini dinamik tipe uyarlamanın tek doğru yolu.

UIFontMetrics: Özel Yazı Tiplerini Uyarlama

UIFontMetrics, iOS 11'de tanıtılan ve rastgele bir UIFont'u seçilen metin stiline orantılı olarak ölçekleyen bir sınıftır. iOS 11'den önce geliştiriciler, yalnızca sistem yazı tipi SF Pro'yu döndüren preferredFontForTextStyle'ı doğrudan kullanıyordu. UIFontMetrics bu sorunu çözer: herhangi bir yazı tipini alır ve ağırlığı ve oranları koruyarak ölçeklenmiş sürümünü döndürür.

scaledFont(for:) yöntemi, kullanıcının mevcut metin boyutuna göre bir ölçekleme faktörü hesaplar: Büyük seçilirse faktör 1.0; Çok Büyük (AX1) ise — yaklaşık 1.3; Maksimum (AX5) için — 1.8'e kadar. Faktör, sistem yazı tipine değil, özel yazı tipinin taban boyutuna uygulanır — bu, tasarımcının niyetinin tüm boyutlarda korunmasını sağlar.

UIFontMetrics, bir uygulamadaki tüm özel yazı tipleri için önerilir. WWDC 2024'te Apple, Dynamic Type desteğini kontrol eden ve UIFontMetrics yerine sabit yazı tipi boyutu kullanan öğeleri vurgulayan Accessibility Inspector aracını gösterdi. IT Sectr'da, 2018'den beri tüm projelerde UIFontMetrics'ı uyguladık — bu, metin çakışması hatalarını %35 azalttı.

Swift Kod Örnekleri

Örnek 1: preferredFontForTextStyle ile Sistem Yazı Tipi

Bir etiket için dinamik yazı tipi almanın en basit yolu. Kod, sistem metin boyutundaki değişikliklere otomatik olarak yanıt veren .body stiline sahip bir UILabel'in nasıl ayarlanacağını gösterir.

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 metin boyutu değiştiğinde yazı tipini otomatik olarak günceller — bu bayrak olmadan Dynamic Type mevcut bir etiket için çalışmaz. Boyut değiştiğinde, iOS layoutIfNeeded'ı çağırır ve etiket manuel müdahale olmadan yazı tipini günceller.

Örnek 2: UIFontMetrics ile Özel Yazı Tipi

Özel bir yazı tipi (örneğin Montserrat) kullanırken preferredFontForTextStyle'ı çağırmak SF Pro'yu döndürür, sizin yazı tipinizi değil. UIFontMetrics, özel yazı tipini özel olarak ölçekleyerek tasarımını korur.

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:) yöntemi, bir temel UIFont alır ve .title3 stiliyle orantılı ölçeklenmiş bir sürüm döndürür. Erişilebilirlik boyutu AX5'te, Montserrat-Bold 20pt yazı tipi ~36pt olur — bu stilin sistem yazı tipinin artacağı miktarla tam olarak aynı. IT Sectr'da, 2018'den beri özel yazı tipleri olan tüm projelerde bu deseni kullandık ve görme engelli kullanıcılardan gelen küçük metin şikayetlerini tamamen ortadan kaldırdık.

Örnek 3: Boyut Değişikliklerine Abone Olma

Yazı tipini manuel olarak güncellerseniz (adjustsFontForContentSizeCategory olmadan), UIContentSizeCategory.didChangeNotification bildirimine abone olun. Bu, otomatik yazı tipi güncellemesini miras almayan özel UI öğeleri için gereklidir.

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 abone olmak, uygulamayı yeniden başlatmadan sistem ayarları her değiştiğinde özel öğenin yazı tipini güncellemesini sağlar. iOS 15'ten itibaren, Live Text Size'ı destekleyen uygulamalarda Kontrol Merkezi aracılığıyla metin boyutu değiştirildiğinde bile bildirim gelir.

Sıkça Sorulan Sorular

Dynamic Type tüm iOS sürümlerinde çalışır mı?

Dynamic Type, iOS 7 ve sonraki sürümlerde kullanılabilir. UIFontMetrics iOS 11'de ortaya çıktı — ondan önce preferredFontForTextStyle yöntemi doğrudan kullanılıyordu. iOS 15+'ta, dinamik tip büyük yazı tipleri için ek erişilebilirlik boyutlarını (AX1–AX5) destekler. iOS 10 ve altını destekleyen uygulamalar, UIFontMetrics olmadan preferredFontForTextStyle kullanır ve bu da desteği yalnızca sistem yazı tipi SF Pro ile sınırlar.

Xcode'da Dynamic Type nasıl test edilir?

Xcode 15+'ta simülatörü açın ve Ayarlar → Erişilebilirlik → Ekran ve Metin Boyutu → Daha Büyük Metin'e gidin. Boyutu değiştirmek için kaydırıcıyı sürükleyin. Xcode'un kendisinde, sabit yazı tipine sahip öğeleri vurgulayan Debug → Accessibility Inspector bulunur. Otomasyon için, XCUITest aracılığıyla UISlider ayarlarını değiştiren bir test kullanın — bu, tüm ekranların doğru şekilde yeniden oluşturulmasını sağlar.

Dynamic Type için düzen ölçeklenmeli mi?

Evet, dinamik tip ile Auto Layout, UILabel ve UIButton'da intrinsicContentSize kullanımını gerektirir. Erişilebilirlik boyutlarında, metin superview sınırlarını aşabilir — UIScrollView ekleyin veya leading/trailing kısıtlamalarını artırın. Dolgu için UIFontMetrics.scaledValue kullanın, böylece harf aralığı da yazı tipiyle orantılı olarak ölçeklenir.

Özet

  • Dynamic Type, kullanıcının sistem erişilebilirlik ayarlarına yanıt veren iOS'ta otomatik bir yazı tipi ölçekleme sistemidir.
  • 11 metin stili (.largeTitle 34pt'ten .caption2 11pt'ye kadar) başlıklardan altyazılara kadar tüm arayüz senaryolarını kapsar.
  • UIFontMetrics (iOS 11+), özel yazı tiplerini dinamik tipe uyarlamak için tek doğru API'dir.
  • adjustsFontForContentSizeCategory = true bayrağı, sistem boyutu değiştiğinde UILabel ve UIButton yazı tiplerini otomatik olarak günceller.
  • UIContentSizeCategory.didChangeNotification'a abone olmak, standart güncellemeyi miras almayan özel UI öğeleri için gereklidir.
  • Dynamic Type, Apple tavsiyesine göre metin işlevselliği olan uygulamalarda App Review'ı geçmek için zorunludur.
  • Tüm projelerde UIFontMetrics.scaledFont(for:) kullanın — tüm erişilebilirlik boyutlarında tasarımcı yazı tipini korumanın tek yolu budur.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun