Safe Area — ano ito, mga distansya mula sa notch at StatusBar

May-akda: IT Sectr Nai-publish: 2026-02-25 Oras ng pagbabasa: 8 min

Ipinapakita namin kung ano ang Safe Area — ang ligtas na sona ng screen na ginagarantiyang hindi natatakpan ng mga elemento ng system ang nilalaman: notch, Dynamic Island, StatusBar, Home indicator at bilugang sulok. Ang Safe Area ay isang mandatoryong elemento ng adaptive na layout sa iOS at Android, kung wala ito ang interface ay maaaring magmukhang hindi tama sa mga device na may mga hiwa. Ayon sa Apple HIG (2025), mula nang lumabas ang iPhone X noong 2017, lahat ng app ay kinakailangang gumamit ng Safe Area Layout Guide.

Mga Pangunahing Punto

  • Safe Area — ang lugar ng screen na walang mga elemento ng system: notch, StatusBar, Home Indicator, bilugang sulok.
  • Sa iOS ang Safe Area ay ipinapatupad sa pamamagitan ng SafeAreaLayoutGuide at .safeAreaInset() modifier sa SwiftUI.
  • Sa Android ang Safe Area ay ipinapatupad sa pamamagitan ng WindowInsets at WindowInsetsCompat para sa suporta ng mga lumang bersyon.
  • Ang Dynamic Island sa iPhone 14 Pro at mas bago ay pumapalit sa notch at isinasaalang-alang din sa Safe Area.
  • Ayon sa Google Android Docs (2025), ang pagbalewala sa Safe Area ay isa sa tatlong pangunahing dahilan ng pagtanggi ng app sa Google Play at App Store.

Ano ang Safe Area?

Safe Area — ay isang parihabang lugar ng screen kung saan garantisadong hindi natatakpan ang nilalaman ng hardware at software na mga elemento ng system: hiwa ng camera (notch), Dynamic Island, status bar (StatusBar), gesture navigation indicator (Home Indicator), bilugang sulok ng display at navigation panel. Ang mga hangganan ng Safe Area ay dinamikong nagbabago kapag iniikot ang device, tinawag ang keyboard, o inilunsad ang Split View. Ayon sa Apple Human Interface Guidelines (2025), ang pagbalewala sa Safe Area ay itinuturing na pagkakamali sa disenyo at maaaring humantong sa pagtanggi ng app sa pagsusuri.

Bakit kailangan ang Safe Area

Safe Area ay lumulutas sa problema ng pagkakapira-piraso ng screen sa mobile ecosystem. Bago ang iPhone X, lahat ng iPhone ay may parihabang display na may parehong proporsyon. Sa pagdating ng notch, ang bilang ng mga variant ng screen ay tumaas sa 20+ — iba't ibang laki ng hiwa, Dynamic Island, bilugan, indicator. Ang Safe Area ay nag-aabstrak sa developer mula sa mga pagkakaibang ito, na nagbibigay ng nag-iisang API para sa mga adaptive na distansya. Ayon sa Apple Developer (2025), awtomatikong inilalapat ng iOS ang Safe Area para sa root view, ngunit para sa UICollectionView at UIScrollView kinakailangan ang manu-manong pagsasaayos.

DeviceUri ng hiwaDistansya itaasDistansya ibabaStatusBar
iPhone SE (3rd gen)Wala20px0pxMayroon
iPhone 13 ProNotch47px34pxSa loob ng notch
iPhone 14 ProDynamic Island59px34pxSa loob ng DI
iPhone 16 ProDynamic Island59px34pxSa loob ng DI
Android Pixel 8Punch-hole (kamera)24px24pxStatus bar

Safe Area sa iOS: SafeAreaLayoutGuide at SwiftUI

Sa iOS ang Safe Area ay ipinapatupad sa pamamagitan ng SafeAreaLayoutGuide sa UIKit at safeAreaInset modifier sa SwiftUI. Ang SafeAreaLayoutGuide ay isang gabay sa layout na idinaragdag sa bawat UIView at tumutukoy ng parihaba na walang mga elemento ng system. Sa Interface Builder ang Safe Area ay ipinapakita bilang isang asul na lugar. Inilalapat ng SwiftUI ang Safe Area nang awtomatiko para sa karamihan ng mga container, ngunit pinapayagan itong balewalain sa pamamagitan ng .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),
])

SafeAreaLayoutGuide sa UIKit ay tumutukoy ng apat na anchor — top, bottom, leading, trailing — na awtomatikong isinasaalang-alang ang notch, StatusBar at Home Indicator. Ang pamamaraang ito ay gumagana sa lahat ng iOS device, simula sa iOS 11. Sa SwiftUI ang parehong epekto ay nakakamit sa pamamagitan ng content modifier sa loob ng NavigationStack o VStack — awtomatikong inilalapat ng SwiftUI ang Safe Area Insets.

Swift
// SwiftUI: safeAreaInset at ignoresSafeArea
ZStack {
    Color.blue
        .ignoresSafeArea()
    VStack {
        Text("Nilalaman sa Safe Area")
            .foregroundColor(.white)
        Spacer()
    }
}
.safeAreaInset(edge: .bottom) {
    Text("Bar sa ibaba ng screen")
        .padding()
        .background(.thinMaterial)
}

Sa SwiftUI .ignoresSafeArea() ay nagpapahintulot sa background na lumampas sa Safe Area, at .safeAreaInset(edge:) ay nagdaragdag ng custom na panel na nagpapaliit ng Safe Area mula sa tinukoy na gilid. Ito ang karaniwang pattern para sa mga navigation panel, toolbar, at advertisement banner.

Safe Area sa Android: WindowInsets at System Bars

Sa Android ang Safe Area ay ipinapatupad sa pamamagitan ng WindowInsets (API 30+) at WindowInsetsCompat (AndroidX library). Ang WindowInsets ay nagbibigay ng mga distansya para sa Status Bar, Navigation Bar, IME (keyboard), at system gestures. Simula sa Android 10 (API 29), inirerekomenda ng Google ang paggamit ng WindowInsetsCompat.getInsets() na may uri na WindowInsetsCompat.Type.systemBars() upang makakuha ng nagkakaisang set ng mga distansya para sa lahat ng elemento ng system.

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
        }
    }
}

Sa halimbawang ito WindowInsets ay nagbabalik ng mga distansya para sa lahat ng system bar — Status Bar sa itaas, Navigation Bar sa ibaba. Ang setOnApplyWindowInsetsListener ay tinatawag tuwing nagbabago ang insets (pag-ikot, pagtawag ng keyboard). Ang pamamaraang systemBars() ay pinagsasama ang status bar, navigation bar at customization bar sa isang set, na pinapasimple ang code.

Edge-to-Edge sa Android

Simula sa Android 15, hinihingi ng Google ang edge-to-edge na display para sa lahat ng app na nagta-target ng bagong API. Ito ay nangangahulugan na ang app ay iginuguhit sa ilalim ng system bar, at ang Safe Area ay inilalapat sa pamamagitan ng handleWindowInsets o WindowInsetController. Ayon sa Android Developer Blog (2025), 68% ng mga app ay lumipat na sa edge-to-edge, na nagpapabuti ng visual na persepsyon sa mga device na may malalaking screen.

Safe Area, Padding at Insets: ano ang pagkakaiba

Safe Area, Padding at Insets — magkakaugnay ngunit magkakaibang konsepto. Ang Safe Area ay ang lugar ng screen na garantisadong walang mga elemento ng system. Ang Padding ay ang panloob na distansya ng isang elemento mula sa mga hangganan nito. Ang Insets ay ang mga tiyak na numerikong halaga ng mga distansya na ibinabalik ng Safe Area API. Ayon sa Apple Tech Notes (2025), ang pagkalito sa pagitan ng Safe Area at Padding ay sanhi ng 40% ng mga problema sa kakayahang umangkop sa mga app store.

KonseptoKahuluganPlatformPagbabago
Safe AreaLugar na walang elemento ng systemiOS, AndroidDinamiko
PaddingPanloob na distansya sa loob ng viewLahat ng platformStatiko
Layout MarginsDistansya mula sa gilid ng layoutiOS (UIKit)Statiko/dinamiko
WindowInsetsSystem distansya ng AndroidAndroidDinamiko

Mga halimbawa ng implementasyon ng Safe Area na may code

Talakayin natin ang mga karaniwang senaryo: Safe Area sa UIKit para sa horizontal na oryentasyon na may notch, Safe Area sa SwiftUI na may custom na panel, Safe Area sa Android Compose. Halimbawa para sa iOS UIKit — paglalagay ng collection sa loob ng Safe Area sa iPhone na may Dynamic Island. Halimbawa para sa Jetpack Compose — paggamit ng WindowInsets sa Material 3.

Kotlin
// Jetpack Compose: mga distansya mula sa 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("Nilalaman sa Safe Area")
        }
    }
}

Sa Jetpack Compose Scaffold ay awtomatikong isinasaalang-alang ang WindowInsets sa pamamagitan ng parameter na contentWindowInsets. Ang InnerPadding ay ipinapasa sa content at inilalapat sa panloob na mga elemento. Ang Column na may modifier na padding(innerPadding) ay ginagarantiyang hindi mapupunta ang text sa ilalim ng system bar.

Mga karaniwang pagkakamali sa paggamit ng Safe Area

Ayon sa pagsusuri ng App Store Review ng Apple (2025), limang pinakakaraniwang pagkakamali: pagbalewala sa Safe Area sa horizontal na oryentasyon, paggamit ng hardcoded na distansya sa halip na SafeAreaLayoutGuide, maling pagproseso ng Safe Area sa UIScrollView, nakalimutang distansya sa modal presentation, at kawalan ng adaptasyon para sa Dynamic Island. Hardcoded na distansya (hardcoded 20px sa itaas) — ang pinakakaraniwang pagkakamali: sa iPhone 14 Pro ang 20px na ito ay nagiging 59px, at napuputol ang nilalaman.

  • Pagbalewala sa horizontal na oryentasyon — sa horizontal na oryentasyon ang Safe Area ay may iba't ibang distansya: ang Home Indicator ay lumilipat sa kanang bahagi, at ang distansya sa itaas ay nababawasan.
  • Hardcoded na distansya — ang mga halagang 20px o 44px ay angkop lamang para sa mga lumang iPhone na walang hiwa. Sa mga modernong device, ang mga distansya ay nagkakaiba ng 2-3 beses.
  • ScrollView at Safe Area — ang contentInsetAdjustmentBehavior sa UIScrollView ay dapat itakda sa .always, kung hindi ang nilalaman ay maitatago sa ilalim ng system bar.

Mga Madalas Itanong

Paano makukuha ang mga distansya ng Safe Area sa SwiftUI?

Sa SwiftUI Safe Area ay awtomatikong inilalapat sa karamihan ng mga container. Para basahin ang mga distansya gamitin ang EnvironmentValues: @Environment(.safeAreaInsets) var safeAreaInsets. Para sa custom na panel gamitin ang .safeAreaInset(edge:content:). Para sa background na dapat lumampas sa ilalim ng mga elemento ng system, ilapat ang .ignoresSafeArea().

Ano ang edge-to-edge sa Android?

Edge-to-edge — mode ng display kung saan ang app ay iginuguhit sa ilalim ng system bar (Status Bar, Navigation Bar), at ang Safe Area ay inilalapat sa pamamagitan ng WindowInsets. Simula sa Android 15, hinihingi ng Google ang edge-to-edge para sa lahat ng app na may targetSdk 35. Ipinapatupad sa pamamagitan ng WindowInsetsCompat o handleWindowInsets sa Jetpack Compose.

Kailangan bang iproseso ang Safe Area para sa WebView?

Oo, ang WebView ay dapat ding isaalang-alang ang Safe Area. Sa iOS gamitin ang webView.scrollView.contentInsetAdjustmentBehavior = .always. Sa Android idagdag ang android:fitsSystemWindows="true" sa XML o programmatic padding sa pamamagitan ng ViewCompat.setOnApplyWindowInsetsListener. Ang CSS environment (env(safe-area-inset-top)) ay gumagana sa Safari, ngunit hindi sa system WebView ng Android.

Buod

  • Safe Area — lugar ng screen na walang notch, Dynamic Island, StatusBar at Home Indicator.
  • iOS: ipinapatupad sa pamamagitan ng SafeAreaLayoutGuide sa UIKit at .safeAreaInset sa SwiftUI.
  • Android: ipinapatupad sa pamamagitan ng WindowInsets (API 30+) o WindowInsetsCompat (AndroidX).
  • Ang Dynamic Island sa iPhone 14 Pro at mas bago ay nagpapataas ng itaas na distansya ng Safe Area sa 59px.
  • Ang pagbalewala sa Safe Area ay isa sa mga pangunahing dahilan ng pagtanggi ng app sa App Store at Google Play.
  • Ang hardcoded na distansya ay hindi pinapayagan — palaging gamitin ang programmatic na Safe Area API.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din