SafeAreaView — що це, верстка з Safe Area в React Native

Автор: IT Sectr Опубліковано: 2026-07-06 Час читання: 10 хв

SafeAreaView — компонент React Native для верстки з урахуванням безпечної зони екрану на пристроях з вирізами та закругленнями. На iPhone з 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% активних iPhone мають дисплей з вирізом або 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 з нативного layout-guide. Верхній відступ включає висоту рядка стану (звичайно 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 — найпростіший спосіб захисту контенту, але не завжди гнучкий. Компонент застосовує однакові відступи до всіх сторін, що незручно, коли потрібен різний padding для різних країв. Наприклад, бічні відступи можуть бути не потрібні, а нижній — тільки для кнопки.

Основні альтернативи: 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) через хук useSafeAreaInsets, що дозволяє застосовувати їх вибірково.

Бібліотека також надає SafeAreaProvider — компонент, обов’язковий на верхньому рівні додатка. Він підписується на зміни системних відступів при повороті екрану або відкритті клавіатури. React Navigation використовує цю бібліотеку за замовчуванням.

SafeAreaView з react-native-safe-area-context відрізняється від вбудованого: він працює на більшій кількості пристроїв та підтримує анімацію зміни відступів. Для нового проекту рекомендується встановити цю бібліотеку як залежність та використовувати її SafeAreaView замість вбудованого.

Типові помилки при роботі з SafeAreaView

SafeAreaView часто використовується некоректно. Перша помилка — обгортання кожного компонента в SafeAreaView, що створює подвійні відступи. Правило: один SafeAreaView на кореневий View екрану. Вкладені компоненти успадковують відступи через Flex-верстку.

Друга помилка — ігнорування Android. На Android SafeAreaView використовує WindowInsets, які можуть відрізнятися на різних версіях ОС. На Android 15+ системні панелі можуть бути прозорими, і відступи змінюються. Завжди тестуйте SafeAreaView на реальних пристроях, а не лише в емуляторі.

Третя помилка — жорстко задані padding. Ніколи не використовуйте 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 з від’ємним margin для компенсації нижнього відступу.

Чому SafeAreaView не додає відступи на Android?

На деяких Android-пристроях SafeAreaView може не спрацьовувати через налаштування виробника. Перевірте, що використовується React Native 0.64+. Для гарантованої роботи встановіть react-native-safe-area-context та обгорніть додаток у SafeAreaProvider.

Чи впливає орієнтація екрану на SafeAreaView?

Так, при повороті екрану SafeAreaView перераховує відступи. В альбомній орієнтації на iPhone з Notch бічні відступи можуть бути 0, а верхній залишається. Компонент react-native-safe-area-context автоматично підписується на зміни орієнтації.

Чим відрізняється SafeAreaView від StatusBar?

SafeAreaView керує відступами контенту від усіх системних елементів (рядка стану, Notch, домашнього індикатора). StatusBar — компонент для контролю кольору, стилю та видимості рядка стану. Вони вирішують різні завдання та можуть використовуватися разом.

Підсумки

  • SafeAreaView — компонент React Native для автоматичного врахування системних відступів на iOS (Notch, Dynamic Island) та Android (рядок стану, навігація)
  • Принцип роботи — зчитує safeAreaInsets (iOS) або WindowInsets (Android) та застосовує їх як padding до кореневого контейнера
  • Notch та Dynamic Island вимагають верхніх відступів 44-56 pt, нижній відступ 34 pt для домашнього індикатора iPhone
  • react-native-safe-area-context — більш гнучка альтернатива з хуком useSafeAreaInsets для вибіркового застосування відступів
  • Типові помилки: подвійні відступи, жорстко задані padding замість системних API, ігнорування особливостей Android
  • Edge-to-edge дисплеї вимагають SafeAreaView для коректного розташування інтерактивних елементів
  • Один SafeAreaView на екран — вкладені обгортки створюють подвійні відступи, що ламають верстання

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також