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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন