Safe Area — এটি কী, notch এবং StatusBar থেকে মার্জিন

লেখক: IT Sectr প্রকাশিত: 2026-02-25 পড়ার সময়: 8 মিনিট

আমরা দেখাই Safe Area কী — স্ক্রিনের নিরাপদ অঞ্চল যা নিশ্চিত করে যে কন্টেন্ট সিস্টেম এলিমেন্ট: notch, Dynamic Island, StatusBar, Home ইন্ডিকেটর এবং গোলাকার কোণ দ্বারা আচ্ছাদিত না হয়। Safe Area iOS এবং Android-এ অ্যাডাপ্টিভ লেআউটের একটি বাধ্যতামূলক উপাদান, যা ছাড়া কাটআউটযুক্ত ডিভাইসে ইন্টারফেস ভুল দেখাতে পারে। Apple HIG (2025) অনুসারে, 2017 সালে iPhone X চালুর পর থেকে, সমস্ত অ্যাপ্লিকেশনকে Safe Area Layout Guide ব্যবহার করতে হবে।

মূল পয়েন্ট

  • Safe Area — স্ক্রিনের এলাকা যা সিস্টেম এলিমেন্ট: notch, StatusBar, Home Indicator, গোলাকার কোণ থেকে মুক্ত।
  • iOS-এ, Safe Area বাস্তবায়িত হয় SafeAreaLayoutGuide এবং SwiftUI-তে .safeAreaInset() মডিফায়ারের মাধ্যমে।
  • Android-এ, Safe Area বাস্তবায়িত হয় WindowInsets এবং পুরনো সংস্করণের সমর্থনের জন্য WindowInsetsCompat-এর মাধ্যমে।
  • iPhone 14 Pro এবং নতুন模型中 Dynamic Island notch প্রতিস্থাপন করে এবং Safe Area-তেও এটি বিবেচনায় নেওয়া হয়।
  • Google Android Docs (2025) অনুসারে, Safe Area উপেক্ষা করা Google Play এবং App Store-এ অ্যাপ্লিকেশন প্রত্যাখ্যানের তিনটি প্রধান কারণের একটি।

Safe Area কী?

Safe Area হল স্ক্রিনের একটি আয়তাকার এলাকা যেখানে কন্টেন্ট হার্ডওয়্যার এবং সফ্টওয়্যার সিস্টেম এলিমেন্ট: ক্যামেরা কাটআউট (notch), Dynamic Island, স্ট্যাটাস বার (StatusBar), জেসচার নেভিগেশন ইন্ডিকেটর (Home Indicator), গোলাকার ডিসপ্লে কোণ এবং নেভিগেশন বার দ্বারা আচ্ছাদিত না হওয়ার নিশ্চয়তা দেওয়া হয়। ডিভাইস ঘুরালে, কীবোর্ড খুললে বা Split View চালু করলে Safe Area-এর সীমানা গতিশীলভাবে পরিবর্তিত হয়। Apple Human Interface Guidelines (2025) অনুসারে, Safe Area উপেক্ষা করাকে ডিজাইন ত্রুটি হিসেবে বিবেচনা করা হয় এবং পর্যালোচনার সময় অ্যাপ্লিকেশন প্রত্যাখ্যানের কারণ হতে পারে।

কেন Safe Area প্রয়োজন

Safe Area মোবাইল ইকোসিস্টেমে স্ক্রিন বিভাজনের সমস্যা সমাধান করে। iPhone X-এর আগে, সমস্ত iPhone-এর একই অনুপাতের আয়তাকার ডিসপ্লে ছিল। notch আসার পর, স্ক্রিন ভেরিয়েন্টের সংখ্যা 20+ এ পৌঁছেছে — বিভিন্ন notch আকার, Dynamic Island, গোলাকার কোণ, ইন্ডিকেটর। Safe Area ডেভেলপারকে এই পার্থক্যগুলো থেকে বিমূর্ত করে, অ্যাডাপ্টিভ মার্জিনের জন্য একটি ইউনিফায়েড API প্রদান করে। Apple Developer (2025) অনুসারে, iOS রুট ভিউতে স্বয়ংক্রিয়ভাবে Safe Area প্রয়োগ করে, কিন্তু UICollectionView এবং UIScrollView-এর জন্য ম্যানুয়াল কনফিগারেশন প্রয়োজন।

ডিভাইসকাটআউটের ধরনউপরের মার্জিননিচের মার্জিনStatusBar
iPhone SE (3rd gen)কোনোটি নয়20px0pxহ্যাঁ
iPhone 13 ProNotch47px34pxNotch-এর ভিতরে
iPhone 14 ProDynamic Island59px34pxDI-এর ভিতরে
iPhone 16 ProDynamic Island59px34pxDI-এর ভিতরে
Android Pixel 8Punch-hole (ক্যামেরা)24px24pxস্ট্যাটাস বার

iOS-এ Safe Area: SafeAreaLayoutGuide এবং SwiftUI

iOS-এ, Safe Area বাস্তবায়িত হয় UIKit-এ SafeAreaLayoutGuide এবং SwiftUI-তে safeAreaInset মডিফায়ারের মাধ্যমে। SafeAreaLayoutGuide হল একটি লেআউট গাইড যা প্রতিটি UIView-এ যোগ করা হয় এবং সিস্টেম এলিমেন্ট থেকে মুক্ত আয়তক্ষেত্র নির্ধারণ করে। Interface Builder-এ, Safe Area নীল এলাকা হিসেবে প্রদর্শিত হয়। SwiftUI অধিকাংশ কন্টেইনারের জন্য স্বয়ংক্রিয়ভাবে Safe Area প্রয়োগ করে কিন্তু .ignoresSafeArea()-এর মাধ্যমে এটি উপেক্ষা করার অনুমতি দেয়।

Swift
// UIKit: SafeAreaLayoutGuide
let safeGuide = view.safeAreaLayoutGuide
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    button.topAnchor.constraint(
        equalTo: safeGuide.topAnchor),
    button.leadingAnchor.constraint(
        equalTo: safeGuide.leadingAnchor),
    button.trailingAnchor.constraint(
        equalTo: safeGuide.trailingAnchor),
])

UIKit-এ SafeAreaLayoutGuide চারটি অ্যাঙ্কর — শীর্ষ, নিচ, শুরু, শেষ — নির্ধারণ করে যা স্বয়ংক্রিয়ভাবে notch, StatusBar এবং Home Indicator বিবেচনায় নেয়। এই পদ্ধতি iOS 11 থেকে সমস্ত iOS ডিভাইসে কাজ করে। SwiftUI-তে, একই প্রভাব NavigationStack বা VStack-এর ভিতরে কন্টেন্ট মডিফায়ারের মাধ্যমে অর্জিত হয় — SwiftUI স্বয়ংক্রিয়ভাবে Safe Area Insets প্রয়োগ করে।

Swift
// SwiftUI: safeAreaInset এবং ignoresSafeArea
ZStack {
    Color.blue
        .ignoresSafeArea()
    VStack {
        Text("Safe Area-এ কন্টেন্ট")
            .foregroundColor(.white)
        Spacer()
    }
}
.safeAreaInset(edge: .bottom) {
    Text("স্ক্রিনের নিচের বার")
        .padding()
        .background(.thinMaterial)
}

SwiftUI-তে, .ignoresSafeArea() ব্যাকগ্রাউন্ডকে Safe Area-এর বাইরে প্রসারিত করার অনুমতি দেয়, যেখানে .safeAreaInset(edge:) একটি কাস্টম প্যানেল যোগ করে যা নির্দিষ্ট দিকে Safe Area হ্রাস করে। এটি নেভিগেশন বার, টুলবার এবং বিজ্ঞাপন ব্যানারের জন্য একটি স্ট্যান্ডার্ড প্যাটার্ন।

Android-এ Safe Area: WindowInsets এবং System Bars

Android-এ, Safe Area বাস্তবায়িত হয় WindowInsets (API 30+) এবং WindowInsetsCompat (AndroidX লাইব্রেরি) এর মাধ্যমে। WindowInsets Status Bar, Navigation Bar, IME (কীবোর্ড) এবং সিস্টেম জেসচারের জন্য মার্জিন প্রদান করে। Android 10 (API 29) থেকে শুরু করে, Google সকল সিস্টেম এলিমেন্টের জন্য একীভূত মার্জিন সেট পেতে WindowInsetsCompat.getInsets() ব্যবহার করার পরামর্শ দেয় WindowInsetsCompat.Type.systemBars() এর সাথে।

Kotlin
// Android: WindowInsets (Kotlin)
class MainActivity : AppCompatActivity() {
    override fun onCreate(
        savedInstanceState: Bundle?
    ) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ViewCompat.setOnApplyWindowInsetsListener(
            findViewById(R.id.main_content)
        ) { view, insets ->
            val systemBars = insets.getInsets(
                WindowInsetsCompat.Type.systemBars()
            )
            view.setPadding(
                systemBars.left,
                systemBars.top,
                systemBars.right,
                systemBars.bottom
            )
            ViewCompat.ON_APPLY_WINDOW_INSETS_LISTENER
        }
    }
}

এই উদাহরণে, WindowInsets সকল সিস্টেম বারের জন্য মার্জিন ফেরত দেয় — উপরে Status Bar, নিচে Navigation Bar। setOnApplyWindowInsetsListener প্রতিবার মার্জিন পরিবর্তনের সময় কল করা হয় (ঘূর্ণন, কীবোর্ড আহ্বান)। systemBars() পদ্ধতি স্ট্যাটাস বার, নেভিগেশন বার এবং কাস্টমাইজেশন বারকে একটি সেটে একত্রিত করে, কোড সহজ করে।

Android-এ Edge-to-Edge

Android 15 থেকে শুরু করে, Google নতুন API লক্ষ্য করে সমস্ত অ্যাপ্লিকেশনের জন্য edge-to-edge ডিসপ্লে প্রয়োজন। এর মানে হল অ্যাপ্লিকেশন সিস্টেম বারের নিচে আঁকে, এবং Safe Area প্রয়োগ করা হয় handleWindowInsets বা WindowInsetController-এর মাধ্যমে। Android Developer Blog (2025) অনুসারে, 68% অ্যাপ্লিকেশন ইতিমধ্যে edge-to-edge-এ স্থানান্তরিত হয়েছে, যা বড় স্ক্রিনযুক্ত ডিভাইসে ভিজ্যুয়াল ধারণা উন্নত করে।

Safe Area, Padding এবং Insets: পার্থক্য কী

Safe Area, Padding এবং Insets সম্পর্কিত কিন্তু ভিন্ন ধারণা। Safe Area হল স্ক্রিনের এলাকা যা সিস্টেম এলিমেন্ট থেকে মুক্ত থাকার নিশ্চয়তা দেওয়া হয়। Padding হল একটি এলিমেন্টের তার সীমানা থেকে অভ্যন্তরীণ মার্জিন। Insets হল নির্দিষ্ট সংখ্যাসূচক অফসেট মান যা Safe Area API ফেরত দেয়। Apple Tech Notes (2025) অনুসারে, Safe Area এবং Padding-এর মধ্যে বিভ্রান্তি অ্যাপ স্টোরগুলিতে 40% অভিযোজনযোগ্যতা সমস্যার কারণ।

ধারণাসংজ্ঞাপ্ল্যাটফর্মপরিবর্তনযোগ্যতা
Safe Areaসিস্টেম এলিমেন্ট ছাড়া এলাকাiOS, Androidগতিশীল
Paddingভিউ-এর ভিতরে অভ্যন্তরীণ মার্জিনসব প্ল্যাটফর্মস্থির
Layout Marginsলেআউটের প্রান্ত থেকে মার্জিনiOS (UIKit)স্থির/গতিশীল
WindowInsetsAndroid-এ সিস্টেম মার্জিনAndroidগতিশীল

কোড সহ Safe Area বাস্তবায়নের উদাহরণ

আসুন সাধারণ পরিস্থিতি বিবেচনা করি: notch সহ ল্যান্ডস্কেপ ওরিয়েন্টেশনের জন্য UIKit-এ Safe Area, কাস্টম প্যানেল সহ SwiftUI-তে Safe Area, Android Compose-এ Safe Area৷ iOS UIKit-এর জন্য উদাহরণ — Dynamic Island সহ iPhone-এ Safe Area-এর ভিতরে কালেকশন স্থাপন। Jetpack Compose-এর জন্য উদাহরণ — Material 3-এ WindowInsets ব্যবহার।

Kotlin
// Jetpack Compose: Safe Area মার্জিন
@OptIn(ExperimentalMaterial3Api::class)
fun SafeAreaScreen() {
    val systemBars = with(
        LocalDensity.current
    ) {
        val insets = WindowInsets
            .systemBars
            .getAsPaddingValues()
        PaddingValues(
            top = insets.calculateTopPadding(),
            bottom = insets.calculateBottomPadding()
        )
    }
    Scaffold(
        contentWindowInsets = WindowInsets(
            top = systemBars.computeTopPadding(),
            bottom = systemBars.computeBottomPadding()
        )
    ) { innerPadding ->
        Column(
            modifier = Modifier
                .padding(innerPadding)
        ) {
            Text("Safe Area-এ কন্টেন্ট")
        }
    }
}

Jetpack Compose-এ, Scaffold contentWindowInsets প্যারামিটারের মাধ্যমে স্বয়ংক্রিয়ভাবে WindowInsets বিবেচনায় নেয়। InnerPadding content-এ পাস করা হয় এবং অভ্যন্তরীণ উপাদানগুলিতে প্রয়োগ করা হয়। padding(innerPadding) মডিফায়ার সহ Column নিশ্চিত করে যে টেক্সট সিস্টেম বারের নিচে না যায়।

Safe Area নিয়ে কাজ করার সময় সাধারণ ভুল

Apple (2025) দ্বারা App Store Review বিশ্লেষণ অনুসারে, পাঁচটি সবচেয়ে সাধারণ ভুল হল: ল্যান্ডস্কেপ ওরিয়েন্টেশনে Safe Area উপেক্ষা করা, SafeAreaLayoutGuide-এর পরিবর্তে হার্ডকোডেড মার্জিন ব্যবহার, UIScrollView-এ Safe Area-এর ভুল হ্যান্ডলিং, মোডাল প্রেজেন্টেশনে ভুলে যাওয়া মার্জিন এবং Dynamic Island-এর জন্য অভিযোজনের অভাব। হার্ডকোডেড মার্জিন (উপরে 20px হার্ডকোডেড) সবচেয়ে সাধারণ ভুল: iPhone 14 Pro-তে, সেই 20px 59px হয়ে যায় এবং কন্টেন্ট কেটে যায়।

  • ল্যান্ডস্কেপ উপেক্ষা করা — ল্যান্ডস্কেপ ওরিয়েন্টেশনে, Safe Area-এর আলাদা মার্জিন থাকে: Home Indicator ডান দিকে সরে যায় এবং উপরের মার্জিন কমে যায়।
  • হার্ডকোডেড মার্জিন — 20px বা 44px এর মান শুধুমাত্র notch ছাড়া পুরনো iPhone-এ কাজ করে। আধুনিক ডিভাইসে, মার্জিন 2-3 গুণ আলাদা হয়।
  • ScrollView এবং Safe Area — UIScrollView-এ contentInsetAdjustmentBehavior .always-এ সেট করতে হবে, অন্যথায় কন্টেন্ট সিস্টেম বারের নিচে লুকিয়ে থাকবে।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

SwiftUI-তে Safe Area মার্জিন কীভাবে পাবেন?

SwiftUI-তে, Safe Area অধিকাংশ কন্টেইনারে স্বয়ংক্রিয়ভাবে প্রয়োগ হয়। মার্জিন পড়তে, EnvironmentValues ব্যবহার করুন: @Environment(\.safeAreaInsets) var safeAreaInsets। কাস্টম প্যানেলের জন্য, .safeAreaInset(edge:content:) ব্যবহার করুন। ব্যাকগ্রাউন্ডের জন্য যা সিস্টেম এলিমেন্টের নিচে প্রসারিত হওয়া উচিত, .ignoresSafeArea() প্রয়োগ করুন।

Android-এ edge-to-edge কী?

Edge-to-edge হল একটি ডিসপ্লে মোড যেখানে অ্যাপ্লিকেশন সিস্টেম বার (Status Bar, Navigation Bar) এর নিচে আঁকে, এবং Safe Area WindowInsets-এর মাধ্যমে প্রয়োগ করা হয়। Android 15 থেকে শুরু করে, Google targetSdk 35 সহ সমস্ত অ্যাপ্লিকেশনের জন্য edge-to-edge প্রয়োজন। এটি Jetpack Compose-এ WindowInsetsCompat বা handleWindowInsets-এর মাধ্যমে বাস্তবায়িত হয়।

আমার কি WebView-এর জন্য Safe Area হ্যান্ডেল করা দরকার?

হ্যাঁ, WebView-কেও Safe Area বিবেচনায় নিতে হবে। iOS-এ, webView.scrollView.contentInsetAdjustmentBehavior = .always ব্যবহার করুন। Android-এ, XML-এ android:fitsSystemWindows="true" যোগ করুন অথবা ViewCompat.setOnApplyWindowInsetsListener-এর মাধ্যমে প্রোগ্রামেটিক padding করুন। CSS পরিবেশ (env(safe-area-inset-top)) Safari-এ কাজ করে কিন্তু Android সিস্টেম WebViews-এ নয়।

সারাংশ

  • Safe Area — স্ক্রিনের এলাকা যা notch, Dynamic Island, StatusBar এবং Home Indicator থেকে মুক্ত।
  • iOS: UIKit-এ SafeAreaLayoutGuide এবং SwiftUI-তে .safeAreaInset-এর মাধ্যমে বাস্তবায়িত।
  • Android: WindowInsets (API 30+) বা WindowInsetsCompat (AndroidX) এর মাধ্যমে বাস্তবায়িত।
  • iPhone 14 Pro এবং নতুন模型中 Dynamic Island Safe Area-এর উপরের মার্জিন 59px পর্যন্ত বাড়ায়।
  • Safe Area উপেক্ষা করা App Store এবং Google Play-এ অ্যাপ্লিকেশন প্রত্যাখ্যানের প্রধান কারণগুলির একটি।
  • হার্ডকোডেড মার্জিন গ্রহণযোগ্য নয় — সর্বদা Safe Area-এর প্রোগ্রামেটিক APIs ব্যবহার করুন।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

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

আরও পড়ুন