हम दिखाते हैं कि Safe Area क्या है — स्क्रीन का सुरक्षित क्षेत्र जो गारंटी देता है कि सामग्री सिस्टम तत्वों: notch, Dynamic Island, StatusBar, Home इंडिकेटर और गोल कोनों द्वारा ओवरलैप नहीं की जाती है। Safe Area iOS और Android में अनुकूली लेआउट का एक अनिवार्य तत्व है, जिसके बिना इंटरफ़ेस कटआउट वाले उपकरणों पर गलत दिखाई दे सकता है। Apple HIG (2025) के अनुसार, 2017 में iPhone X की शुरुआत के बाद से, सभी एप्लिकेशन को Safe Area Layout Guide का उपयोग करना चाहिए।
मुख्य बातें
Safe Area स्क्रीन का एक आयताकार क्षेत्र है जहाँ सामग्री हार्डवेयर और सॉफ़्टवेयर सिस्टम तत्वों: कैमरा कटआउट (notch), Dynamic Island, स्टेटस बार (StatusBar), जेस्चर नेविगेशन इंडिकेटर (Home Indicator), गोल डिस्प्ले कोनों और नेविगेशन बार द्वारा ओवरलैप न होने की गारंटी है। Safe Area की सीमाएँ डिवाइस घुमाने, कीबोर्ड खोलने या Split View शुरू करने पर गतिशील रूप से बदलती हैं। Apple Human Interface Guidelines (2025) के अनुसार, 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) | कोई नहीं | 20px | 0px | हाँ |
| iPhone 13 Pro | Notch | 47px | 34px | Notch के अंदर |
| iPhone 14 Pro | Dynamic Island | 59px | 34px | DI के अंदर |
| iPhone 16 Pro | Dynamic Island | 59px | 34px | DI के अंदर |
| Android Pixel 8 | Punch-hole (कैमरा) | 24px | 24px | स्टेटस बार |
iOS में, Safe Area को UIKit में SafeAreaLayoutGuide और SwiftUI में safeAreaInset मॉडिफ़ायर के माध्यम से कार्यान्वित किया जाता है। SafeAreaLayoutGuide एक लेआउट गाइड है जो प्रत्येक UIView में जोड़ा जाता है और सिस्टम तत्वों से मुक्त आयत को परिभाषित करता है। Interface Builder में, Safe Area नीले क्षेत्र के रूप में दिखाई देता है। SwiftUI अधिकांश कंटेनरों के लिए स्वचालित रूप से Safe Area लागू करता है लेकिन .ignoresSafeArea() के माध्यम से इसे अनदेखा करने की अनुमति देता है।
// 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 लागू करता है।
// 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 (API 30+) और WindowInsetsCompat (AndroidX लाइब्रेरी) के माध्यम से कार्यान्वित किया जाता है। WindowInsets Status Bar, Navigation Bar, IME (कीबोर्ड) और सिस्टम जेस्चर के लिए मार्जिन प्रदान करता है। Android 10 (API 29) से शुरू करके, Google सभी सिस्टम तत्वों के लिए एकीकृत मार्जिन सेट प्राप्त करने के लिए WindowInsetsCompat.getInsets() का उपयोग WindowInsetsCompat.Type.systemBars() के साथ करने की सलाह देता है।
// 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 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 API द्वारा लौटाए जाते हैं। Apple Tech Notes (2025) के अनुसार, Safe Area और Padding के बीच भ्रम ऐप स्टोर में 40% अनुकूलनशीलता समस्याओं का कारण है।
| अवधारणा | परिभाषा | प्लेटफ़ॉर्म | परिवर्तनशीलता |
|---|---|---|---|
| Safe Area | सिस्टम तत्वों के बिना क्षेत्र | iOS, Android | गतिशील |
| Padding | व्यू के अंदर आंतरिक मार्जिन | सभी प्लेटफ़ॉर्म | स्थिर |
| Layout Margins | लेआउट किनारों से मार्जिन | iOS (UIKit) | स्थिर/गतिशील |
| WindowInsets | Android में सिस्टम मार्जिन | Android | गतिशील |
आइए विशिष्ट परिदृश्यों पर विचार करें: notch के साथ लैंडस्केप ओरिएंटेशन के लिए UIKit में Safe Area, कस्टम पैनल के साथ SwiftUI में Safe Area, Android Compose में Safe Area। iOS UIKit के लिए उदाहरण — Dynamic Island वाले iPhone पर Safe Area के अंदर कलेक्शन रखना। Jetpack Compose के लिए उदाहरण — Material 3 में WindowInsets का उपयोग।
// 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 गारंटी देता है कि टेक्स्ट सिस्टम बार के नीचे नहीं जाएगा।
Apple (2025) द्वारा App Store Review विश्लेषण के अनुसार, पाँच सबसे सामान्य गलतियाँ हैं: लैंडस्केप ओरिएंटेशन में Safe Area को अनदेखा करना, SafeAreaLayoutGuide के बजाय हार्डकोडेड मार्जिन का उपयोग करना, UIScrollView में Safe Area की गलत हैंडलिंग, मोडल प्रेजेंटेशन में भूला हुआ मार्जिन और Dynamic Island के लिए अनुकूलन की कमी। हार्डकोडेड मार्जिन (ऊपर 20px हार्डकोडेड) सबसे आम गलती है: iPhone 14 Pro पर, वे 20px 59px हो जाते हैं, और सामग्री कट जाती है।
अक्सर पूछे जाने वाले प्रश्न
SwiftUI में, Safe Area अधिकांश कंटेनरों पर स्वचालित रूप से लागू होता है। मार्जिन पढ़ने के लिए, EnvironmentValues का उपयोग करें: @Environment(\.safeAreaInsets) var safeAreaInsets। कस्टम पैनल के लिए, .safeAreaInset(edge:content:) का उपयोग करें। उन बैकग्राउंड के लिए जो सिस्टम तत्वों के नीचे फैलने चाहिए, .ignoresSafeArea() लागू करें।
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 को ध्यान में रखना चाहिए। iOS में, webView.scrollView.contentInsetAdjustmentBehavior = .always का उपयोग करें। Android में, XML में android:fitsSystemWindows="true" जोड़ें या ViewCompat.setOnApplyWindowInsetsListener के माध्यम से प्रोग्रामेटिक padding करें। CSS वातावरण (env(safe-area-inset-top)) Safari में काम करता है लेकिन Android सिस्टम WebViews में नहीं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें