Dynamic Type: یہ کیا ہے، iOS میں فونٹ اسکیلنگ

مصنف: IT Sectr اشاعت: 2026-02-26 مطالعے کا وقت: 8 منٹ
Dynamic Type iOS میں ایک خودکار فونٹ اسکیلنگ سسٹم ہے، جو iOS 7 سے آپریٹنگ سسٹم میں شامل ہے۔ فکسڈ ٹیکسٹ سائز کے برعکس، Dynamic Type صارف کی طرف سے سیٹنگز → ڈسپلے اور ٹیکسٹ سائز میں منتخب کردہ سسٹم ایکسیسبیلٹی سیٹنگز کے مطابق فونٹ سائز کو ایڈجسٹ کرتا ہے۔ Apple Human Interface Guidelines (2025) کے مطابق، ڈائنامک ٹائپ سپورٹ ان 32% صارفین کے لیے انٹرفیس پڑھنے کی اہلیت بڑھاتا ہے جو ایکسیسبیلٹی سیٹنگز کے ذریعے فونٹ سائز تبدیل کرتے ہیں۔

اہم نکات

  • Dynamic Type صارف کے سسٹم سیٹنگز کے مطابق خودکار فونٹ اسکیلنگ کے لیے iOS میں شامل نظام ہے، جو iOS 7 سے دستیاب ہے۔
  • UIFontMetrics (iOS 11+) تناسب برقرار رکھتے ہوئے کسٹم فونٹس کو ڈائنامک ٹائپ میں ڈھالنے کے لیے اہم API ہے۔
  • ٹیکسٹ اسٹائل — .largeTitle سے .caption2 تک 11 پہلے سے طے شدہ اسٹائل، ہر ایک مخصوص سائز اور وزن کے ساتھ۔
  • Auto Layout intrinsicContentSize کے ذریعے فونٹ تبدیلیوں پر صحیح ردعمل دیتا ہے — لے آؤٹ خود بخود دوبارہ حساب کرتا ہے۔
  • Dynamic Type App Review پاس کرنے کے لیے لازمی ہے اور Apple ایکسیسبیلٹی تعمیل کے لیے تجویز کرتا ہے۔

Dynamic Type کیا ہے؟

Dynamic Type ایک Apple ٹیکنالوجی ہے جو سسٹم ٹیکسٹ سائز تبدیل ہونے پر ایپلیکیشن فونٹس کو خود بخود اسکیل کرنے کی اجازت دیتی ہے۔ صارف سیٹنگز → ایکسیسبیلٹی → ڈسپلے اور ٹیکسٹ سائز میں اپنی پسندیدہ سائز مقرر کرتا ہے، اور Dynamic Type کو سپورٹ کرنے والی تمام ایپس بغیر ری اسٹارٹ کے فونٹ سائز کو ڈھال لیتی ہیں۔

سسٹم 11 اسکیلنگ لیول فراہم کرتا ہے: XS (14pt بنیاد) سے XXXL (23pt بنیاد) تک، نیز شدید بصارت سے محروم صارفین کے لیے 5 اضافی ایکسیسبیلٹی سائز (AX1–AX5)۔ سائز تبدیل ہونے پر، iOS ایک UIContentSizeCategory.didChangeNotification نوٹیفکیشن پیدا کرتا ہے، اور ایپ کو UIFontMetrics کے ذریعے فونٹس دوبارہ لوڈ کرنا ہوتے ہیں۔ Apple Human Interface Guidelines کے مطابق، Dynamic Type لائن اسپیسنگ یا حرف تناسب نہیں بدلتا — صرف فونٹ سائز، تمام سائزوں پر پڑھنے کی اہلیت برقرار رکھتا ہے۔

Dynamic Type ان ایپس کے لیے لازمی ہے جو ایکسیسبیلٹی اسٹیٹس کا ہدف رکھتی ہیں۔ WWDC 2024 میں، Apple نے اعلان کیا کہ ڈائنامک ٹائپ سپورٹ کے بغیر ایپس کو جائزے میں مسترد کیے جانے کا خطرہ ہے اگر ان کی بنیادی فعالیت ٹیکسٹ پڑھنے سے متعلق ہے۔ IT Sectr پروجیکٹس میں، ہم پہلے ورژن سے Dynamic Type نافذ کرتے ہیں — اس سے بعد میں ایکسیسبیلٹی ڈھالنے میں 20% تک وقت بچتا ہے۔

iOS ٹیکسٹ اسٹائل: largeTitle سے caption2 تک

Apple سسٹم فونٹ SF Pro کے لیے UIFontDescriptor.UIAttributes کے ذریعے 11 پہلے سے طے شدہ ٹیکسٹ اسٹائل فراہم کرتا ہے۔ ڈویلپر پکسل سائز متعین نہیں کرتا — وہ ایک معنوی اسٹائل منتخب کرتا ہے، اور iOS صارف کی سیٹنگز کی بنیاد پر اصل فونٹ سائز لاگو کرتا ہے۔

اسٹائل سائز (ڈیفالٹ) سائز (AX5) استعمال
.largeTitle 34pt 62pt پہلی سطح کے اسکرین عنوانات
.title1 28pt 50pt ثانوی عنوانات
.title2 22pt 40pt سیکشن عنوانات
.title3 20pt 36pt ذیلی عنوانات
.headline 17pt semibold 31pt فہرستوں میں نمایاں متن
.body 17pt 31pt بنیادی متن
.callout 16pt 29pt کال آؤٹ اور اضافی متن
.subheadline 15pt 27pt عناصر کے لیبل
.footnote 13pt 23pt فوٹ نوٹ اور چھوٹا متن
.caption1 12pt 21pt تصویری کیپشن
.caption2 11pt 19pt لیبل اور چھوٹے کیپشن

ہر اسٹائل ایک مقررہ وزن کے ساتھ سسٹم فونٹ SF Pro استعمال کرتا ہے (body کے لیے Regular، headline کے لیے Bold)۔ کسٹم فونٹس UIFontMetrics کے ذریعے منسلک ہوتے ہیں — تیسرے فریق کے فونٹ کو ڈائنامک ٹائپ میں ڈھالنے کا واحد صحیح طریقہ۔

UIFontMetrics: کسٹم فونٹس کو ڈھالنا

UIFontMetrics ایک کلاس ہے جو iOS 11 میں متعارف کرائی گئی، جو کسی بھی UIFont کو منتخب ٹیکسٹ اسٹائل کے تناسب سے اسکیل کرتی ہے۔ iOS 11 سے پہلے، ڈویلپرز براہ راست preferredFontForTextStyle استعمال کرتے تھے، جو صرف سسٹم فونٹ SF Pro لوٹاتا ہے۔ UIFontMetrics اس مسئلے کو حل کرتا ہے: یہ کسی بھی فونٹ کو لے کر اس کا اسکیل شدہ ورژن لوٹاتا ہے، وزن اور تناسب برقرار رکھتا ہے۔

scaledFont(for:) طریقہ صارف کے موجودہ ٹیکسٹ سائز کی بنیاد پر اسکیلنگ فیکٹر کا حساب لگاتا ہے: اگر بڑا منتخب کیا گیا ہے، فیکٹر 1.0 ہے؛ اگر بہت بڑا (AX1) — تقریباً 1.3؛ زیادہ سے زیادہ (AX5) — 1.8 تک۔ فیکٹر کسٹم فونٹ کے بنیادی سائز پر لاگو ہوتا ہے، سسٹم پر نہیں — یہ یقینی بناتا ہے کہ ڈیزائنر کا ارادہ تمام سائزوں پر محفوظ رہے۔

UIFontMetrics ایپ میں تمام کسٹم فونٹس کے لیے تجویز کیا جاتا ہے۔ WWDC 2024 میں، Apple نے Accessibility Inspector ٹول دکھایا، جو Dynamic Type سپورٹ چیک کرتا ہے اور UIFontMetrics کی بجائے فکسڈ فونٹ سائز استعمال کرنے والے عناصر کو نمایاں کرتا ہے۔ IT Sectr میں، ہم نے 2018 سے تمام پروجیکٹس میں UIFontMetrics نافذ کیا ہے — اس سے ٹیکسٹ اوورلیپ بگز میں 35% کمی آئی ہے۔

Swift کوڈ مثالیں

مثال 1: preferredFontForTextStyle کے ذریعے سسٹم فونٹ

لیبل کے لیے ڈائنامک فونٹ حاصل کرنے کا سب سے آسان طریقہ۔ کوڈ دکھاتا ہے کہ .body اسٹائل کے ساتھ UILabel کیسے سیٹ کریں جو سسٹم ٹیکسٹ سائز میں تبدیلیوں پر خود بخود ردعمل دیتا ہے۔

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 فلیگ سسٹم ٹیکسٹ سائز تبدیل ہونے پر خود بخود فونٹ اپ ڈیٹ کرتا ہے — اس فلیگ کے بغیر، Dynamic Type موجودہ لیبل کے لیے کام نہیں کرے گا۔ سائز تبدیل ہونے پر، iOS layoutIfNeeded کو کال کرتا ہے، اور لیبل بغیر دستی مداخلت کے فونٹ اپ ڈیٹ کرتا ہے۔

مثال 2: UIFontMetrics کے ذریعے کسٹم فونٹ

کسٹم فونٹ (مثلاً Montserrat) استعمال کرتے وقت preferredFontForTextStyle کو کال کرنے پر SF Pro واپس آئے گا، آپ کا فونٹ نہیں۔ UIFontMetrics خاص طور پر کسٹم فونٹ کو اسکیل کرتا ہے، اس کا ڈیزائن برقرار رکھتا ہے۔

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:) طریقہ ایک بنیادی UIFont لے کر .title3 اسٹائل کے تناسب میں اسکیل شدہ ورژن لوٹاتا ہے۔ ایکسیسبیلٹی سائز AX5 پر، Montserrat-Bold 20pt فونٹ ~36pt ہو جاتا ہے — بالکل اسی قدر جتنا اس اسٹائل کا سسٹم فونٹ بڑھے گا۔ IT Sectr میں، ہم نے 2018 سے کسٹم فونٹس والے تمام پروجیکٹس میں یہ پیٹرن استعمال کیا ہے، جس نے بصارت سے محروم صارفین کی چھوٹے ٹیکسٹ کی شکایات کو مکمل طور پر ختم کر دیا۔

مثال 3: سائز تبدیلیوں کی سبسکرائب کرنا

اگر آپ دستی طور پر فونٹ اپ ڈیٹ کرتے ہیں (adjustsFontForContentSizeCategory کے بغیر)، تو UIContentSizeCategory.didChangeNotification نوٹیفکیشن سبسکرائب کریں۔ یہ کسٹم UI عناصر کے لیے ضروری ہے جو خودکار فونٹ اپ ڈیٹ حاصل نہیں کرتے۔

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 کو سبسکرائب کرنا یقینی بناتا ہے کہ کسٹم عنصر ایپ کو دوبارہ شروع کیے بغیر سسٹم سیٹنگز تبدیل ہونے پر اپنا فونٹ اپ ڈیٹ کرتا ہے۔ iOS 15 سے، نوٹیفکیشن اس وقت بھی آتا ہے جب Live Text Size کو سپورٹ کرنے والی ایپس میں کنٹرول سینٹر کے ذریعے ٹیکسٹ سائز تبدیل کیا جائے۔

اکثر پوچھے گئے سوالات

کیا Dynamic Type تمام iOS ورژنز پر کام کرتا ہے؟

Dynamic Type iOS 7 اور بعد کے ورژنز پر دستیاب ہے۔ UIFontMetrics iOS 11 میں ظاہر ہوا — اس سے پہلے preferredFontForTextStyle طریقہ براہ راست استعمال ہوتا تھا۔ iOS 15+ پر، ڈائنامک ٹائپ بڑے فونٹس کے لیے اضافی ایکسیسبیلٹی سائز (AX1–AX5) کو سپورٹ کرتا ہے۔ iOS 10 اور اس سے نیچے کو سپورٹ کرنے والی ایپس UIFontMetrics کے بغیر preferredFontForTextStyle استعمال کرتی ہیں، جو سپورٹ کو صرف سسٹم فونٹ SF Pro تک محدود کرتی ہیں۔

Xcode میں Dynamic Type کیسے ٹیسٹ کریں؟

Xcode 15+ میں، سمیلیٹر کھولیں اور سیٹنگز → ایکسیسبیلٹی → ڈسپلے اور ٹیکسٹ سائز → بڑا ٹیکسٹ منتخب کریں۔ سائز تبدیل کرنے کے لیے سلائیڈر کو گھسیٹیں۔ Xcode میں ہی، Debug → Accessibility Inspector ہے، جو فکسڈ فونٹ والے عناصر کو نمایاں کرتا ہے۔ آٹومیشن کے لیے، XCUITest کے ذریعے UISlider سیٹنگز تبدیل کرنے والا ٹیسٹ استعمال کریں — یہ یقینی بناتا ہے کہ تمام اسکرینز صحیح طریقے سے دوبارہ بنیں۔

کیا Dynamic Type کے لیے لے آؤٹ کو اسکیل کیا جانا چاہیے؟

ہاں، ڈائنامک ٹائپ کے ساتھ Auto Layout کو UILabel اور UIButton پر intrinsicContentSize استعمال کرنے کی ضرورت ہے۔ ایکسیسبیلٹی سائز پر، ٹیکسٹ superview کی حدود سے باہر نکل سکتا ہے — UIScrollView شامل کریں یا leading/trailing کنسٹرینٹس بڑھائیں۔ پیڈنگ کے لیے UIFontMetrics.scaledValue استعمال کریں، تاکہ حرفوں کا فاصلہ بھی فونٹ کے تناسب سے اسکیل ہو۔

خلاصہ

  • Dynamic Type iOS میں ایک خودکار فونٹ اسکیلنگ سسٹم ہے جو صارف کے سسٹم ایکسیسبیلٹی سیٹنگز پر ردعمل دیتا ہے۔
  • 11 ٹیکسٹ اسٹائل (.largeTitle 34pt سے .caption2 11pt تک) عنوانات سے کیپشنز تک تمام انٹرفیس منظرناموں کا احاطہ کرتے ہیں۔
  • UIFontMetrics (iOS 11+) کسٹم فونٹس کو ڈائنامک ٹائپ میں ڈھالنے کا واحد صحیح API ہے۔
  • adjustsFontForContentSizeCategory = true فلیگ سسٹم سائز تبدیل ہونے پر خود بخود UILabel اور UIButton فونٹس اپ ڈیٹ کرتا ہے۔
  • UIContentSizeCategory.didChangeNotification کو سبسکرائب کرنا کسٹم UI عناصر کے لیے ضروری ہے جو معیاری اپ ڈیٹ حاصل نہیں کرتے۔
  • Dynamic Type Apple کی سفارش کے مطابق ٹیکسٹ فعالیت والی ایپس میں App Review پاس کرنے کے لیے لازمی ہے۔
  • تمام پروجیکٹس میں UIFontMetrics.scaledFont(for:) استعمال کریں — تمام ایکسیسبیلٹی سائزوں پر ڈیزائنر فونٹ برقرار رکھنے کا یہی واحد طریقہ ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں