Full Screen Cover: ano ito, presentasyong buong screen at UIKit

May-akda: IT Sectr Nai-publish: 2026-06-09 Oras ng pagbabasa: 5 min

Full Screen Cover — isang istilo ng modal na presentasyon sa iOS kung saan ang bagong screen ay sumasakop sa buong display nang hindi nakikita ang parent na nilalaman. Hindi tulad ng Page Sheet, ganap na itinatago ng Full Screen Cover ang nakaraang screen at ginagamit para sa media content, photo editor, at mga screen ng awtorisasyon. Ayon sa Apple Developer, 2025, ang istilong ito ay default hanggang iOS 13, ngunit nananatiling ginustong para sa immersive na mga senaryo. Sa SwiftUI, ang modifier na .fullScreenCover ay nagbibigay ng deklaratibong API para sa presentasyong buong screen.

Mga pangunahing punto

  • Full Screen Cover — modal na presentasyong buong screen ng iOS, nagtatago ng parent na nilalaman sa buong oras ng pagpapakita.
  • UIModalPresentationStyle.fullScreen — constant ng UIKit na nagtatakda ng buong screen mode kapag tumatawag ng present.
  • SwiftUI ay nagbibigay ng modifier na .fullScreenCover para sa deklaratibong paggawa ng modal na mga window na buong screen.
  • Full Screen Cover ay naiiba sa Page Sheet sa pamamagitan ng buong pagtakip sa background at kawalan ng interaktibong pagsasara sa pamamagitan ng pag-swipe.
  • Ginagamit para sa mga video player, camera, photo editor, pagtingin ng PDF at iba pang immersive na senaryo.

Ano ang Full Screen Cover sa iOS?

Full Screen Cover — ay isang istilo ng modal na presentasyon sa iOS kung saan ang nai-present na controller ay sumasakop sa buong screen ng device. Ang parent na nilalaman ay ganap na nakatago, na lumilikha ng immersive na epekto at pinagtutuunan ang user sa kasalukuyang gawain.

Bago ang iOS 13, ang Full Screen Cover ay ang tanging istilo ng modal na presentasyon sa iPhone. Lahat ng tawag sa present(_:animated:completion:) ay default na gumamit ng .fullScreen. Simula sa iOS 13, binago ng Apple ang default na istilo sa .automatic, na para sa iPhone ay pumipili ng .pageSheet. Gayunpaman, ang Full Screen Cover ay nananatiling available at ginagamit para sa mga senaryo kung saan mahalaga ang buong pagtutok.

Hindi tulad ng Page Sheet, hindi pinapayagan ng Full Screen Cover ang pakikipag-ugnayan sa parent na nilalaman at hindi ito ipinapakita sa ilalim ng modal window. Hindi maaaring isara ng user ang Full Screen Cover sa pamamagitan ng pag-swipe pababa — para sa pagsasara ay kinakailangan ang programatikong tawag na dismiss(animated:completion:) o isang pindutan ng pagsasara sa screen mismo. Ang pag-uugali na ito ay mahalagang isaalang-alang kapag nagdidisenyo ng UX.

Full Screen Cover vs Page Sheet: paghahambing ng istilo

Page Sheet — ang pangalawang pangunahing istilo ng modal na presentasyon, na lumitaw sa iOS 13. Ang Page Sheet ay ipinapakita bilang isang card na may puwang sa itaas, kung saan makikita ang parent screen sa ilalim. Maaaring isara ng user ang Page Sheet sa pamamagitan ng pag-swipe pababa. Ang Full Screen Cover, sa kabaligtaran, ay nagtatago ng parent na nilalaman at hindi sumusuporta sa pagsasara sa pamamagitan ng pag-swipe.

KatangianFull Screen CoverPage Sheet
Pagtatakip ng backgroundBuong, hindi nakikita ang parent na nilalamanBahagya, nakikita ang parent sa ilalim ng card
Pagsasara sa pamamagitan ng pag-swipeHindi, programatiko lamang o sa pamamagitan ng pindutanOo, pag-swipe pababa ay nagsasara
Tipikal na gamitVideo, camera, photo editor, PDFForm, setting, detalyadong pagtingin
Animasyon ng pagpapakitaMula sa ibaba pataas, buong screenMula sa ibaba pataas, card na may puwang
AvailabilityiOS 2+iOS 13+

Ang pagpili sa pagitan ng Full Screen Cover at Page Sheet ay nakadepende sa nilalaman at konteksto. Inirerekomenda ang paggamit ng Full Screen Cover para sa nilalaman na nangangailangan ng buong atensyon: video sa buong screen mode, preview ng larawan, pag-scan ng dokumento. Page Sheet — para sa mga gawain kung saan mahalaga ang konteksto ng parent screen: editing form, pagpili ng opsyon, pagtingin ng detalye.

Implementasyon sa UIKit: UIModalPresentationStyle

UIKit ay nagbibigay ng constant na UIModalPresentationStyle.fullScreen para sa pag-configure ng istilo ng modal na presentasyon. Ang pagtatakda ng property na ito sa UIViewController bago ang tawag na present ay ginagarantiyahan na ang controller ay ipapakita sa buong screen. Kinokontrol din ng controller ang pag-uugali kapag lumitaw ang keyboard at pagproseso ng mga system event.

Konfigurasyon at delegate

Pagkatapos itakda ang istilong .fullScreen, inirerekomenda na i-configure ang presentationController?.delegate para sa paghawak ng mga event ng pagsasara. Ang delegate na UIAdaptivePresentationControllerDelegate ay nagbibigay-daan upang maharang ang pagtatangkang magsara at maiwasan ang pagkawala ng data. Hindi tulad ng Page Sheet, para sa Full Screen Cover ang delegate ay isinaaktibo lamang sa programatikong tawag na dismiss.

Paghawak ng rotasyon at keyboard

Ang Full Screen Cover ay wastong humahawak ng rotasyon ng screen at paglitaw ng keyboard. Sa rotasyon, ang modal controller ay awtomatikong umaangkop sa bagong oryentasyon. UIKeyboardWillShowNotification ay nagpapahintulot na itulak ang nilalaman pataas kapag lumitaw ang keyboard, upang ang mga text field ay manatiling nakikita. Hindi tulad ng Page Sheet, hindi binabago ng Full Screen Cover ang mga sukat nito kapag lumitaw ang keyboard.

swift
let playerVC = VideoPlayerViewController()
playerVC.modalPresentationStyle = .fullScreen
playerVC.modalTransitionStyle = .crossDissolve
present(playerVC, animated: true) {
    playerVC.startPlayback()
}

// Isara
dismiss(animated: true) {
    print("Player naisara")
}

SwiftUI: modifier na .fullScreenCover

SwiftUI ay nagbibigay ng modifier na .fullScreenCover para sa deklaratibong paggawa ng modal na mga window na buong screen. Hindi tulad ng .sheet (Page Sheet), ang .fullScreenCover ay lumilikha ng istilong .fullScreen na may analog na pag-uugali: buong pagtatakip ng nilalaman at kawalan ng pagsasara sa pamamagitan ng pag-swipe.

Paggamit sa binding at data

Ang modifier ay tumatanggap ng binding sa Bool o isang opsyonal na identifiable na bagay. Kapag ang binding ay itinakda sa true, ang SwiftUI ay nag-a-animate ng paglitaw ng buong screen na window. Para sa paglipat ng data, ginagamit ang parameter na onDismiss at closure na may nilalaman. Ang environment value na \.dismiss ay nagpapahintulot na isara ang modal window mula sa loob.

Full Screen Cover vs Sheet

Ang pagpili sa pagitan ng .fullScreenCover at .sheet sa SwiftUI ay analog sa UIKit: .fullScreenCover para sa immersive na nilalaman, .sheet para sa mga card. SwiftUI ay awtomatikong pumipili ng tamang pag-uugali ng pagsasara: ang .sheet ay maaaring isara sa pamamagitan ng pag-swipe, .fullScreenCover — programatiko lamang. Ang mga modifier ay maaaring pagsamahin sa parehong View hierarchy.

swift
struct CameraView: View {
    @State private var showCamera = false

    var body: some View {
        Button("Buksan ang camera") {
            showCamera = true
        }
        .fullScreenCover(isPresented: $showCamera) {
            CameraPreviewView()
                .ignoresSafeArea()
        }
    }
}

struct CameraPreviewView: View {
    @Environment(\.dismiss) private var dismiss

    var body: some View {
        ZStack {
            Color.black.ignoresSafeArea()
            VStack {
                Spacer()
                Button("Kuhanan") { dismiss() }
                    .foregroundColor(.white)
            }
        }
    }
}

Custom na animasyon at transition

Full Screen Cover ay sumusuporta sa custom na animasyon sa pamamagitan ng UIModalTransitionStyle sa UIKit at custom na transition sa SwiftUI. Mga istilong standard: .coverVertical (mula sa ibaba pataas), .crossDissolve (untia-ting paglitaw), .flipHorizontal (pag-flip) at .partialCurl (epekto ng pahina).

UIKit: UIViewControllerAnimatedTransitioning

Para sa ganap na custom na animasyon, ipatupad ang protocol na UIViewControllerAnimatedTransitioning. Ito ay nagbibigay-daan upang tukuyin ang tagal ng animasyon at ang transition mismo sa pamamagitan ng method na animateTransition(using:). Ang controller ng animasyon ay itinatalaga sa pamamagitan ng delegate na UINavigationControllerDelegate o UIViewControllerTransitioningDelegate.

SwiftUI: Matched Geometry Effect

Sa SwiftUI, ang custom na transition para sa .fullScreenCover ay ginagawa sa pamamagitan ng matchedGeometryEffect. Ang modifier na ito ay nag-a-animate ng paglipat ng isang elemento mula sa parent View patungo sa buong screen na window. Halimbawa, kapag nag-click sa isang thumbnail ng larawan, ito ay maayos na nagbubukas sa buong screen, na lumilikha ng epekto ng pagpapatuloy. Ang MatchedGeometryEffect ay gumagana sa id at namespace, na nag-uugnay sa elemento sa source at target na posisyon.

swift
struct PhotoViewer: View {
    @State private var selectedPhoto: String?
    @Namespace private var animation

    var body: some View {
        HStack {
            ForEach(["photo1", "photo2"], id: \.self) { photo in
                Image(photo)
                    .matchedGeometryEffect(id: photo, in: animation)
                    .onTapGesture { selectedPhoto = photo }
            }
        }
        .fullScreenCover(item: $selectedPhoto) { photo in
            Image(photo)
                .matchedGeometryEffect(id: photo, in: animation)
                .ignoresSafeArea()
        }
    }
}

Kailan gagamitin ang Full Screen Cover?

Full Screen Cover ay inirerekomenda para sa mga senaryo kung saan ang nilalaman ay dapat sumakop sa buong screen nang walang pagkagambala mula sa parent interface. Ang Apple HIG ay nagtatangi ng tatlong pangunahing kategorya: nilalaman ng media, mga tool sa paggawa ng nilalaman, at pansamantalang system interface.

Media at libangan

Mga video player, pagtingin ng larawan, pagbabasa ng PDF at komiks — tipikal na mga halimbawa ng paggamit ng Full Screen Cover. AVPlayerViewController sa iOS ay awtomatikong gumagamit ng buong screen mode kapag lumilipat sa landscape. Ang mga photo editor tulad ng Adobe Lightroom ay nagbubukas ng buong screen na editor sa ibabaw ng library ng larawan.

Mga tool sa paggawa ng nilalaman

Camera, document scanner, pag-record ng boses — mga gawain na nangangailangan ng buong atensyon ng user. UIImagePickerController hanggang iOS 14 ay gumamit ng Full Screen Cover para sa camera. Simula sa iOS 14, ang system picker ay gumagamit ng Page Sheet, ngunit ang developer ay maaaring pilitin ang .fullScreen para sa custom na camera.

Ano ang dapat iwasan

Huwag gamitin ang Full Screen Cover para sa: registration form (mas gusto ang Page Sheet), mga screen na may text input kung saan mahalaga ang konteksto ng parent page, at sunud-sunod na nabigasyon sa loob ng modal window. Material Design ay nagrerekomenda rin na iwasan ang pag-block ng system back button — sa iOS ito ay pinapayagan, ngunit ang user ay dapat magkaroon ng malinaw na paraan ng pagsasara sa pamamagitan ng UI element.

Mga madalas itanong

Ano ang pagkakaiba sa pagitan ng .fullScreen at .overFullScreen sa iOS?

.fullScreen ay nagtatago ng parent controller at inaalis ito sa display hierarchy. .overFullScreen ay nagpapakita ng modal controller sa ibabaw ng parent, ngunit ang parent ay nananatili sa hierarchy at patuloy na tumatanggap ng mga event. Ang overFullScreen ay kapaki-pakinabang para sa transparent na background at custom na layer animation.

Bakit binago ng Apple ang default na istilo mula fullScreen patungong pageSheet?

Binago ng Apple ang default na istilo sa iOS 13 upang mapabuti ang interaksyon ng user. Page Sheet ay nagpapahintulot na makita ang konteksto ng parent screen at isara ang modal window sa pamamagitan ng pag-swipe, na nagpapabilis ng nabigasyon. Ang Full Screen Cover ay nananatili para sa mga senaryo kung saan kinakailangan ang buong pagtutok nang walang pagkagambala ng background.

Paano isara ang Full Screen Cover nang programatiko?

Sa UIKit, tawagan ang dismiss(animated:completion:) sa presentingViewController o presentedViewController. Sa SwiftUI, gamitin ang environment value na \.dismiss at tawagan ito bilang function. Para sa programatikong pagsasara mula sa parent controller, baguhin ang binding na ipinasa sa .fullScreenCover sa false.

Gumagana ba ang Full Screen Cover sa iPad?

Oo, gumagana ang Full Screen Cover sa iPad. Para sa iPad ay available ang mga karagdagang istilo: .formSheet (naka-center na window na may fixed size) at .currentContext (kaugnay ng parent controller). Sa iPad, ang Full Screen Cover ay maaaring magmukhang Page Sheet kung ang modalPresentationStyle ay hindi sapilitang itinakda.

Paano maiwasan ang pagsasara ng Full Screen Cover sa pagkawala ng data?

Hindi tulad ng Page Sheet, ang Full Screen Cover ay hindi isinasara sa pamamagitan ng pag-swipe, kaya ang pagkawala ng data ay posible lamang sa programatikong dismiss. I-override ang method na dismiss(animated:completion:) o gamitin ang UIAdaptivePresentationControllerDelegate na tinatawag bago magsara. Magpakita ng UIAlertController na may mga opsyon: i-save, kanselahin, o manatili sa screen.

Buod

  • Full Screen Cover — istilo ng modal na presentasyon ng iOS na nagtatago ng parent na nilalaman at sumasakop sa buong screen.
  • UIKit ay nag-iimplementa ng Full Screen Cover sa pamamagitan ng UIModalPresentationStyle.fullScreen na may custom na transition animation.
  • SwiftUI ay nagbibigay ng modifier na .fullScreenCover na may suporta para sa matchedGeometryEffect para sa maayos na transition.
  • Full Screen ay naiiba sa Page Sheet sa kawalan ng pagsasara sa pamamagitan ng pag-swipe at buong pagtatakip ng parent na nilalaman.
  • Inirerekomenda para sa mga video player, camera, photo editor at iba pang immersive na senaryo.
  • Hindi inirerekomenda para sa mga form, setting at navigation sequence sa loob ng modal window.
  • Pagkawala ng data pigilan sa pamamagitan ng UIAdaptivePresentationControllerDelegate na may dialog ng kumpirmasyon ng pagsasara.

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