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 तत्वों के लिए आवश्यक है जो मानक अपडेट प्राप्त नहीं करते।
  • Apple की अनुशंसा के अनुसार टेक्स्ट कार्यक्षमता वाले ऐप्स में App Review पास करने के लिए Dynamic Type अनिवार्य है।
  • सभी परियोजनाओं में UIFontMetrics.scaledFont(for:) का उपयोग करें — सभी एक्सेसिबिलिटी आकारों पर डिज़ाइनर फ़ॉन्ट को संरक्षित करने का यही एकमात्र तरीका है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें