SafeAreaView — ما هو، التصميم مع Safe Area في React Native

المؤلف: IT Sectr نُشر: 2026-07-06 وقت القراءة: 10 دق

SafeAreaView هو مكون React Native للتصميم بمراعاة المنطقة الآمنة للشاشة على الأجهزة ذات القطوع والزوايا المستديرة. على iPhones مع Notch و Dynamic Island، قد يتداخل المحتوى مع الكاميرا والمؤشرات. يقوم SafeAreaView بإضافة حشو تلقائياً، مما يمنع اقتطاع واجهة المستخدم بواسطة عناصر النظام. اعرف المزيد عن Safe Area في التوثيق الرسمي لـ Meta.

النقاط الرئيسية

  • SafeAreaView — مكون يضيف حشوة تلقائياً للمنطقة الآمنة على شاشات iOS و Android
  • Notch و Dynamic Island يتطلبان حشوة علوية، ويقوم SafeAreaView بحسابها تلقائياً
  • Android — يراعي المكون شريط الحالة وأزرار التنقل النظامية
  • بدائل: useSafeAreaInsets من react-native-safe-area-context للتحكم المرن في الحشوة
  • شاشات Edge-to-edge تتطلب استخدام SafeAreaView إلزامياً للتصميم الصحيح

ما هو SafeAreaView؟

SafeAreaView هو مكون React Native يضيف حشوة داخلية تلقائياً حتى لا يتداخل المحتوى مع عناصر واجهة النظام: شريط الحالة، Notch، Dynamic Island وشريط التنقل النظامي. ظهر المكون في React Native 0.50 لـ iOS وتم توسيعه لاحقاً لـ Android.

على iOS، يستخدم SafeAreaView UIView.safeAreaInsets الأصلي، المقدم في iOS 11 (2017). على Android، يراعي المكون WindowInsets — الهوامش النظامية المتاحة منذ Android 5.0 (API 21). وفقاً لـ Apple (2026)، 92% من iPhones النشطة لديها شاشة مع قطع أو Dynamic Island.

لماذا تحتاج Safe Area

مفهوم Safe Area هو جزء من توصيات Apple HIG (Human Interface Guidelines). قبل iPhone X (2017)، كان كافة مساحة الشاشة آمنة. مع ظهور Notch، حددت Apple المناطق حيث لا يجب وضع المحتوى: قطع الكاميرا، مؤشر الوقت والبطارية، مؤشر الصفحة الرئيسية. طبق Android مفهوماً مماثلاً مع ظهور شاشات بقطع في 2018.

كيف تعمل Safe Area على iOS و Android

على iOS، SafeAreaView يقرأ safeAreaInsets من دليل التصميم الأصلي. يشمل الهامش العلوي ارتفاع شريط الحالة (عادة 44 أو 50 نقطة لأجهزة iPhone مع Notch). الهامش السفلي هو 34 نقطة لمؤشر الصفحة الرئيسية. يستخدم Android WindowInsets — هامش علوي لشريط الحالة وهامش سفلي لتنقل النظام.

المنصةالهامش العلويالهامش السفليالمصدر
iOS (Notch)44-50 pt34 ptsafeAreaInsets.top / .bottom
iOS (بدون Notch)20 pt0 ptsafeAreaInsets.top / .bottom
Android (بقطع)24-48 dp24-48 dpWindowInsets.systemBarsInsets
Android (بدون قطع)24 dp0 dpWindowInsets.statusBarsInsets

مهم: يطبق SafeAreaView الحشوة تلقائياً، ولكن فقط للحاوية الجذرية. المكونات المتداخلة لا تتلقى حماية — كل شاشة يجب أن تكون مع SafeAreaView الخاص بها. بالنسبة لنوافذ المودال و BottomSheet، راعي الهوامش بشكل منفصل.

Notch و Dynamic Island وألواح النظام

Notch هو قطع جهازي في الجزء العلوي من الشاشة يحتوي على الكاميرا والمستشعرات. ظهر في iPhone X (2017). Dynamic Island هو منطقة برمجية-جهازية في iPhone 14 Pro وأحدث، تحل محل Notch كعنصر تفاعلي. كلاهما يتطلبان هامشًا علوياً من 50-56 pt.

على Android، القطوع تأتي بأشكال مختلفة: شكل الدمعة، punch-hole، شريط تحت الكاميرا. SafeAreaView على Android يستخدم WindowInsets، والتي تراعي شكل القطع. للتطبيقات في الوضع الأفقي، تتم إضافة هوامش جانبية لمنع تداخل المحتوى مع عناصر النظام.

js
import React from 'react';
import { SafeAreaView, View, Text } from 'react-native';

const App = () => (
  <SafeAreaView style={{ flex: 1 }}>
    <View style={styles.content}>
      <Text>Content is safe from Notch and system bars</Text>
    </View>
  </SafeAreaView>
);

يوصي نهج Edge-to-edge (Android 15+) برسم المحتوى تحت ألواح النظام، ولكن مع مراعاة الهوامش للعناصر التفاعلية. يساعد SafeAreaView في الحفاظ على هذا التوازن: يتم رسم الخلفية تحت الألواح، بينما تبقى الأزرار والنصوص في المنطقة الآمنة.

الاستخدام وبدائل SafeAreaView

SafeAreaView هو أبسط طريقة لحماية المحتوى، ولكنها ليست مرنة دائماً. يطبق المكون نفس الحشوة على جميع الجوانب، وهذا غير مريح عندما تكون حشوة مختلفة مطلوبة لحواف مختلفة. على سبيل المثال، قد تكون الحشوة الجانبية غير ضرورية، بينما قد تكون الحشوة السفلية مطلوبة فقط لزر.

البدائل الرئيسية: useSafeAreaInsets من react-native-safe-area-context (أكثر حل مرن)، StatusBar.currentHeight على Android، Platform.OS مع التحقق اليدوي من نموذج الجهاز. للحالات المعقدة، استخدم مزيجاً من SafeAreaView للحاوية العامة و useSafeAreaInsets للعناصر الفردية.

js
import { useSafeAreaInsets } from 'react-native-safe-area-context';

const CustomHeader = () => {
  const insets = useSafeAreaInsets();

  return (
    <View style={{ paddingTop: insets.top }}>
      <Header />
    </View>
  );
};

مكتبة react-native-safe-area-context هي المعيار الفعلي للعمل مع Safe Area في React Native. هي مدعومة من قبل Expo، React Navigation ومعظم أدوات UI. توفر كلاً من hook ومكون Consumer للأساليب الوظيفية والقائمة على الفصول.

react-native-safe-area-context للتحكم الكامل

react-native-safe-area-context هي مكتبة توفر API أكثر مرونة من SafeAreaView المضمن. الميزة الرئيسية هي الوصول إلى قيم الهوامش الفردية (top، bottom، left، right) من خلال hook useSafeAreaInsets، مما يسمح بالتطبيق الانتقائي للهوامش.

توفر المكتبة أيضاً SafeAreaProvider — مكون مطلوب في المستوى العلوي للتطبيق. يشترك في تغييرات الهوامش النظامية عند تدوير الشاشة أو فتح لوحة المفاتيح. يستخدم React Navigation هذه المكتبة افتراضياً.

SafeAreaView من react-native-safe-area-context يختلف عن المضمن: يعمل على عدد أكبر من الأجهزة ويدعم رسم متحرك لتغير الهوامش. للمشاريع الجديدة، يوصى بتثبيت هذه المكتبة كاعتماد واستخدام SafeAreaView الخاص بها بدلاً من المضمن.

الأخطاء الشائعة عند العمل مع SafeAreaView

SafeAreaView غالباً ما يستخدم بشكل غير صحيح. الخطأ الأول هو تطويق كل مكون في SafeAreaView، مما يخلق حشوة مزدوجة. القاعدة: SafeAreaView واحد لكل View جذري للشاشة. المكونات المتداخلة ترث الهوامش من خلال تصميم Flex.

الخطأ الثاني هو تجاهل Android. على Android، يستخدم SafeAreaView WindowInsets، والتي قد تختلف بين إصدارات نظام التشغيل. على Android 15+، قد تكون ألواح النظام شفافة وتتغير الهوامش. اختبر SafeAreaView دائماً على أجهزة حقيقية، ليس فقط في المحاكي.

الخطأ الثالث هو الحشو المكتوب بشكل ثابت. لا تستخدم أبداً Platform.OS === 'ios' ? 44 : 24 — قيم الهوامش تختلف بين الطرازات وإصدارات نظام التشغيل. استخدم دائماً API النظام: safeAreaInsets أو useSafeAreaInsets. Dynamic Island على iPhone 15 Pro له هوامش مختلفة عن Notch على iPhone X.

الأسئلة الشائعة

هل SafeAreaView يعمل على جميع الأجهزة؟

SafeAreaView يعمل على iOS 11+ و Android 5+. على الأجهزة الأقدم، ستكون الهوامش صفرية، وهذا لا يسبب أخطاء ولكن قد يتطلب تعديلاً يدوياً. للحصول على أقصى توافق، استخدم react-native-safe-area-context.

كيف أستخدم SafeAreaView فقط في الأعلى، دون حشوة سفلية؟

SafeAreaView المضمن لا يسمح باختيار الجوانب. استخدم useSafeAreaInsets من react-native-safe-area-context: احصل على insets.top وطبق paddingTop. أو قم بتطويق SafeAreaView في View بهامش سلبي لتعويض الهامش السفلي.

لماذا لا يضيف SafeAreaView حشوة على Android؟

على بعض أجهزة Android، SafeAreaView قد لا يعمل بسبب إعدادات المصنع. تأكد من استخدام React Native 0.64+. للتشغيل المضمون، قم بتثبيت react-native-safe-area-context وقم بتطويق التطبيق في SafeAreaProvider.

هل يؤثر اتجاه الشاشة على SafeAreaView؟

نعم، عند تدوير الشاشة، SafeAreaView يعيد حساب الهوامش. في الوضع الأفقي على iPhones مع Notch، قد تكون الهوامش الجانبية 0، بينما يبقى الهامش العلوي. يشترك مكون react-native-safe-area-context تلقائياً في تغييرات الاتجاه.

ما الفرق بين SafeAreaView و StatusBar؟

SafeAreaView يدير هوامش المحتوى من جميع عناصر النظام (شريط الحالة، Notch، مؤشر الصفحة الرئيسية). StatusBar هو مكون للتحكم في لون ونمط ورؤية شريط الحالة. يحلان مهاماً مختلفة ويمكن استخدامهما معًا.

الملخص

  • SafeAreaView — مكون React Native للحساب التلقائي لهوامش النظام على iOS (Notch، Dynamic Island) و Android (شريط الحالة، التنقل)
  • كيف يعمل — يقرأ safeAreaInsets (iOS) أو WindowInsets (Android) ويطبقها كحشوة على الحاوية الجذرية
  • Notch و Dynamic Island يتطلبان هوامش علوية بقياس 44-56 pt، هامش سفلي 34 pt لمؤشر الصفحة الرئيسية في iPhone
  • react-native-safe-area-context — بديل أكثر مرونة مع hook useSafeAreaInsets للتطبيق الانتقائي للهوامش
  • الأخطاء الشائعة: حشوة مزدوجة، حشوة مكتوبة بشكل ثابت بدلاً من API النظام، تجاهل خصائص Android
  • شاشات Edge-to-edge تتطلب SafeAreaView لتوضيع صحيح للعناصر التفاعلية
  • SafeAreaView واحد لكل شاشة — الأغلفة المتداخلة تخلق حشوة مزدوجة تكسر التصميم

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا