SafeAreaView — στοιχείο React Native για διάταξη με βάση την ασφαλή περιοχή οθόνης σε συσκευές με εγκοπές και στρογγυλεύσεις. Σε iPhone με Notch και Dynamic Island το περιεχόμενο μπορεί να καλύπτεται από την κάμερα και δείκτες. Το SafeAreaView προσθέτει αυτόματα περιθώρια, αποτρέποντας την περικοπή της διεπαφής από στοιχεία συστήματος. Διαβάστε περισσότερα για το Safe Area στην επίσημη τεκμηρίωση της Meta.
Κύρια σημεία
SafeAreaView — στοιχείο React Native που προσθέτει αυτόματα εσωτερικά περιθώρια (padding) για να μην καλύπτεται το περιεχόμενο από στοιχεία διεπαφής συστήματος: γραμμή κατάστασης, 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% των ενεργών iPhone έχουν οθόνη με εγκοπή ή Dynamic Island.
Η έννοια Safe Area — μέρος των συστάσεων Apple HIG (Human Interface Guidelines). Πριν από το iPhone X (2017) ολόκληρος ο χώρος της οθόνης ήταν ασφαλής. Με την εμφάνιση του Notch, η Apple όρισε περιοχές όπου το περιεχόμενο δεν πρέπει να τοποθετείται: εγκοπή κάμερας, ένδειξη ώρας και μπαταρίας, ένδειξη αρχικής οθόνης. Το Android εισήγαγε παρόμοια έννοια με την εμφάνιση οθονών με εγκοπή το 2018.
Στο iOS το SafeAreaView διαβάζει τα safeAreaInsets από τον εγγενή οδηγό διάταξης. Το άνω περιθώριο περιλαμβάνει το ύψος της γραμμής κατάστασης (συνήθως 44 ή 50 σημεία για iPhone με Notch). Κάτω περιθώριο — 34 σημεία για την ένδειξη αρχικής οθόνης (Home Indicator). Το Android χρησιμοποιεί WindowInsets — άνω περιθώριο για τη γραμμή κατάστασης και κάτω για την πλοήγηση συστήματος.
| Πλατφόρμα | Άνω περιθώριο | Κάτω περιθώριο | Πηγή |
|---|---|---|---|
| iOS (Notch) | 44-50 pt | 34 pt | safeAreaInsets.top / .bottom |
| iOS (χωρίς Notch) | 20 pt | 0 pt | safeAreaInsets.top / .bottom |
| Android (με εγκοπή) | 24-48 dp | 24-48 dp | WindowInsets.systemBarsInsets |
| Android (χωρίς εγκοπή) | 24 dp | 0 dp | WindowInsets.statusBarsInsets |
Σημαντικό: Το SafeAreaView εφαρμόζει padding αυτόματα, αλλά μόνο για το ριζικό container. Τα ένθετα στοιχεία δεν λαμβάνουν προστασία — κάθε οθόνη πρέπει να έχει το δικό της SafeAreaView. Για παράθυρα modal και BottomSheet, λάβετε υπόψη τα περιθώρια ξεχωριστά.
Notch — υλική εγκοπή στο επάνω μέρος της οθόνης που περιέχει κάμερα και αισθητήρες. Εμφανίστηκε στο iPhone X (2017). Dynamic Island — περιοχή υλικού-λογισμικού του iPhone 14 Pro και νεότερων που αντικαθιστά το Notch με ένα διαδραστικό στοιχείο. Και τα δύο απαιτούν άνω περιθώριο 50-56 pt.
Στο Android οι εγκοπές έχουν διάφορα σχήματα: σταγόνα, τρύπα στη γωνία (punch-hole), λωρίδα κάτω από την κάμερα. SafeAreaView στο Android χρησιμοποιεί WindowInsets που λαμβάνουν υπόψη το σχήμα της εγκοπής. Για εφαρμογές σε οριζόντιο προσανατολισμό, προστίθενται πλευρικά περιθώρια για να μην καλύπτεται το περιεχόμενο από στοιχεία συστήματος.
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+) συνιστά τη σχεδίαση περιεχομένου κάτω από πάνελ συστήματος, αλλά με την consideration των περιθωρίων για διαδραστικά στοιχεία. Το SafeAreaView βοηθά στη διατήρηση αυτής της ισορροπίας: το φόντο σχεδιάζεται κάτω από τα πάνελ, τα κουμπιά και το κείμενο — στην ασφαλή ζώνη.
SafeAreaView — ο απλούστερος τρόπος προστασίας περιεχομένου, αλλά όχι πάντα ευέλικτος. Το στοιχείο εφαρμόζει τα ίδια περιθώρια σε όλες τις πλευρές, πράγμα άβολο όταν χρειάζεται διαφορετικό padding για διαφορετικές άκρες. Για παράδειγμα, τα πλευρικά περιθώρια μπορεί να είναι περιττά και το κάτω μόνο για ένα κουμπί.
Κύριες εναλλακτικές: useSafeAreaInsets από react-native-safe-area-context (πιο ευέλικτη λύση), StatusBar.currentHeight στο Android, Platform.OS με μη αυτόματο έλεγχο μοντέλου συσκευής. Για σύνθετες περιπτώσεις, χρησιμοποιήστε συνδυασμό SafeAreaView για το γενικό container και useSafeAreaInsets για μεμονωμένα στοιχεία.
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 — το de facto πρότυπο για εργασία με Safe Area στο React Native. Υποστηρίζεται από Expo, React Navigation και τα περισσότερα UI kits. Παρέχει τόσο hook όσο και στοιχείο Consumer για λειτουργικές και βασισμένες σε κλάσεις προσεγγίσεις.
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 ανά ριζικό View οθόνης. Τα ένθετα στοιχεία κληρονομούν τα περιθώρια μέσω διάταξης Flex.
Δεύτερο λάθος — αγνόηση του Android. Στο Android το SafeAreaView χρησιμοποιεί WindowInsets, τα οποία μπορεί να διαφέρουν σε διαφορετικές εκδόσεις OS. Σε Android 15+ τα πάνελ συστήματος μπορεί να είναι διαφανή και τα περιθώρια αλλάζουν. Πάντα δοκιμάστε το SafeAreaView σε πραγματικές συσκευές, όχι μόνο στον εξομοιωτή.
Τρίτο λάθος — σκληρά κωδικοποιημένο padding. Μην χρησιμοποιείτε ποτέ Platform.OS === 'ios' ? 44 : 24 — οι τιμές περιθωρίων αλλάζουν μεταξύ μοντέλων και εκδόσεων OS. Πάντα χρησιμοποιείτε API συστήματος: safeAreaInsets ή useSafeAreaInsets. Το Dynamic Island σε iPhone 15 Pro έχει διαφορετικά περιθώρια από το Notch σε iPhone X.
Συχνές Ερωτήσεις
SafeAreaView λειτουργεί σε iOS 11+ και Android 5+. Σε παλαιότερες συσκευές, τα περιθώρια θα είναι μηδέν, πράγμα που δεν προκαλεί σφάλματα, αλλά μπορεί να απαιτήσει μη αυτόματη ρύθμιση. Για μέγιστη συμβατότητα, χρησιμοποιήστε react-native-safe-area-context.
Το ενσωματωμένο SafeAreaView δεν επιτρέπει επιλογή πλευρών. Χρησιμοποιήστε useSafeAreaInsets από react-native-safe-area-context: λάβετε insets.top και εφαρμόστε paddingTop. Ή τυλίξτε το SafeAreaView σε View με αρνητικό margin για αντιστάθμιση του κάτω περιθωρίου.
Σε ορισμένες συσκευές Android SafeAreaView μπορεί να μην λειτουργεί λόγω ρυθμίσεων κατασκευαστή. Ελέγξτε ότι χρησιμοποιείτε React Native 0.64+. Για εγγυημένη λειτουργία, εγκαταστήστε react-native-safe-area-context και τυλίξτε την εφαρμογή σε SafeAreaProvider.
Ναι, κατά την περιστροφή οθόνης το SafeAreaView επανυπολογίζει τα περιθώρια. Σε οριζόντιο προσανατολισμό σε iPhone με Notch, τα πλευρικά περιθώρια μπορεί να είναι 0, ενώ το άνω παραμένει. Το στοιχείο react-native-safe-area-context εγγράφεται αυτόματα σε αλλαγές προσανατολισμού.
SafeAreaView διαχειρίζεται τα περιθώρια περιεχομένου από όλα τα στοιχεία συστήματος (γραμμή κατάστασης, Notch, ένδειξη αρχικής οθόνης). StatusBar — στοιχείο για έλεγχο χρώματος, στυλ και ορατότητας της γραμμής κατάστασης. Λύνουν διαφορετικές εργασίες και μπορούν να χρησιμοποιηθούν μαζί.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης