Full Screen Cover: co to je, celoobrazovková prezentace a UIKit

Autor: IT Sectr Publikováno: 2026-06-09 Doba čtení: 5 min

Full Screen Cover — styl modální prezentace v iOS, při kterém nová obrazovka zabírá celý displej bez viditelnosti nadřazeného obsahu. Na rozdíl od Page Sheet, Full Screen Cover zcela skrývá předchozí obrazovku a používá se pro mediální obsah, fotoeditory a autorizační obrazovky. Podle Apple Developer, 2025 byl tento styl výchozí až do iOS 13, ale zůstává preferovaný pro imerzivní scénáře. V SwiftUI poskytuje modifikátor .fullScreenCover deklarativní API pro celoobrazovkovou prezentaci.

Hlavní body

  • Full Screen Cover — celoobrazovková modální prezentace iOS, skrývající nadřazený obsah po celou dobu zobrazení.
  • UIModalPresentationStyle.fullScreen — konstanta UIKit, nastavující celoobrazovkový režim při volání present.
  • SwiftUI poskytuje modifikátor .fullScreenCover pro deklarativní vytváření celoobrazovkových modálních oken.
  • Full Screen Cover se liší od Page Sheet úplným překrytím pozadí a absencí interaktivního zavírání tahem.
  • Používá se pro videopřehrávače, kameru, fotoeditory, prohlížení PDF a další imerzivní scénáře.

Co je Full Screen Cover v iOS?

Full Screen Cover — je styl modální prezentace v iOS, při kterém prezentovaný ovladač zabírá celou obrazovku zařízení. Nadřazený obsah je zcela skryt, což vytváří imerzivní efekt a soustředí uživatele na aktuální úkol.

Před iOS 13 byl Full Screen Cover jediným stylem modální prezentace na iPhone. Všechna volání present(_:animated:completion:) ve výchozím nastavení používala .fullScreen. Od iOS 13 Apple změnil výchozí styl na .automatic, který pro iPhone volí .pageSheet. Full Screen Cover však zůstává k dispozici a používá se pro scénáře, kde je důležité plné soustředění.

Na rozdíl od Page Sheet, Full Screen Cover neumožňuje interakci s nadřazeným obsahem a nezobrazuje jej pod modálním oknem. Uživatel nemůže zavřít Full Screen Cover tahem dolů — pro zavření je vyžadováno programové volání dismiss(animated:completion:) nebo tlačítko zavření na samotné obrazovce. Toto chování je důležité zohlednit při návrhu UX.

Full Screen Cover vs Page Sheet: srovnání stylů

Page Sheet — druhý hlavní styl modální prezentace, který se objevil v iOS 13. Page Sheet se zobrazuje jako karta s mezerou nahoře, pod kterou je vidět nadřazená obrazovka. Uživatel může zavřít Page Sheet tahem dolů. Full Screen Cover naopak skrývá nadřazený obsah a nepodporuje zavírání tahem.

VlastnostFull Screen CoverPage Sheet
Překrytí pozadíÚplné, nadřazený obsah není vidětČástečné, nadřazený je vidět pod kartou
Zavírání tahemNe, pouze programově nebo tlačítkemAno, tah dolů zavírá
Typické použitíVideo, kamera, fotoeditor, PDFFormuláře, nastavení, detailní prohlížení
Animace zobrazeníZdola nahoru, celá obrazovkaZdola nahoru, karta s mezerou
DostupnostiOS 2+iOS 13+

Výběr mezi Full Screen Cover a Page Sheet závisí na obsahu a kontextu. Doporučuje se používat Full Screen Cover pro obsah vyžadující plnou pozornost: video v celoobrazovkovém režimu, náhled fotografií, skenování dokumentů. Page Sheet — pro úkoly, kde je kontext nadřazené obrazovky důležitý: editační formuláře, výběr možností, prohlížení detailů.

Implementace na UIKit: UIModalPresentationStyle

UIKit poskytuje konstantu UIModalPresentationStyle.fullScreen pro konfiguraci stylu modální prezentace. Nastavení této vlastnosti na UIViewController před voláním present zaručuje, že se ovladač zobrazí na celou obrazovku. Ovladač také spravuje chování při zobrazení klávesnice a zpracování systémových událostí.

Konfigurace a delegát

Po nastavení stylu .fullScreen se doporučuje nakonfigurovat presentationController?.delegate pro zpracování událostí zavření. Delegát UIAdaptivePresentationControllerDelegate umožňuje zachytit pokus o zavření a zabránit ztrátě dat. Na rozdíl od Page Sheet se pro Full Screen Cover delegát aktivuje pouze při programovém volání dismiss.

Zpracování rotace a klávesnice

Full Screen Cover správně zpracovává rotaci obrazovky a zobrazení klávesnice. Při rotaci se modální ovladač automaticky přizpůsobí nové orientaci. UIKeyboardWillShowNotification umožňuje posunout obsah nahoru při zobrazení klávesnice, aby textová pole zůstala viditelná. Na rozdíl od Page Sheet, Full Screen Cover nemění své rozměry při zobrazení klávesnice.

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

// Zamítnout
dismiss(animated: true) {
    print("Přehrávač zamítnut")
}

SwiftUI: modifikátor .fullScreenCover

SwiftUI poskytuje modifikátor .fullScreenCover pro deklarativní vytváření celoobrazovkových modálních oken. Na rozdíl od .sheet (Page Sheet), .fullScreenCover vytváří styl .fullScreen s analogickým chováním: úplné překrytí obsahu a absence zavírání tahem.

Použití s binding a daty

Modifikátor přijímá binding na Bool nebo volitelný identifikovatelný objekt. Při nastavení binding na true SwiftUI animuje zobrazení celoobrazovkového okna. Pro předávání dat se používá parametr onDismiss a uzávěr s obsahem. Hodnota prostředí \.dismiss umožňuje zavřít modální okno zevnitř.

Full Screen Cover vs Sheet

Výběr mezi .fullScreenCover a .sheet v SwiftUI je analogický UIKit: .fullScreenCover pro imerzivní obsah, .sheet pro karty. SwiftUI automaticky vybírá správné chování zavírání: .sheet lze zavřít tahem, .fullScreenCover — pouze programově. Modifikátory lze kombinovat ve stejné hierarchii View.

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

    var body: some View {
        Button("Otevřít kameru") {
            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("Zachytit") { dismiss() }
                    .foregroundColor(.white)
            }
        }
    }
}

Vlastní animace a přechody

Full Screen Cover podporuje vlastní animace prostřednictvím UIModalTransitionStyle v UIKit a vlastní přechody v SwiftUI. Standardní styly: .coverVertical (zdola nahoru), .crossDissolve (postupné zobrazení), .flipHorizontal (překlopení) a .partialCurl (efekt stránky).

UIKit: UIViewControllerAnimatedTransitioning

Pro zcela vlastní animaci implementujte protokol UIViewControllerAnimatedTransitioning. Umožňuje definovat dobu trvání animace a samotný přechod prostřednictvím metody animateTransition(using:). Ovladač animace se přiřazuje prostřednictvím delegáta UINavigationControllerDelegate nebo UIViewControllerTransitioningDelegate.

SwiftUI: Matched Geometry Effect

V SwiftUI se vlastní přechody pro .fullScreenCover vytvářejí pomocí matchedGeometryEffect. Tento modifikátor animuje přesun prvku z nadřazeného View do celoobrazovkového okna. Například při kliknutí na miniaturu fotografie se plynule roztáhne na celou obrazovku a vytvoří efekt kontinuity. MatchedGeometryEffect pracuje s id a namespace, které spojují prvek ve zdrojové a cílové pozici.

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

Kdy používat Full Screen Cover?

Full Screen Cover se doporučuje pro scénáře, kde by měl obsah zabírat celou obrazovku bez rozptylování nadřazeným rozhraním. Apple HIG rozlišuje tři hlavní kategorie: mediální obsah, nástroje pro tvorbu obsahu a dočasná systémová rozhraní.

Média a zábava

Videopřehrávače, prohlížení fotografií, čtení PDF a komiksů — typické příklady použití Full Screen Cover. AVPlayerViewController v iOS automaticky používá celoobrazovkový režim při přechodu do landscape. Fotoeditory jako Adobe Lightroom otevírají celoobrazovkový editor nad knihovnou snímků.

Nástroje pro tvorbu obsahu

Kamera, skener dokumentů, nahrávání hlasu — úkoly vyžadující plnou pozornost uživatele. UIImagePickerController do iOS 14 používal Full Screen Cover pro kameru. Od iOS 14 systémový výběr používá Page Sheet, ale vývojář může vynutit .fullScreen pro vlastní kameru.

Čemu se vyhnout

Nepoužívejte Full Screen Cover pro: registrační formuláře (preferován je Page Sheet), obrazovky s textovým vstupem, kde je důležitý kontext nadřazené stránky, a sekvenční navigaci uvnitř modálního okna. Material Design také doporučuje vyhnout se blokování systémového tlačítka zpět — v iOS je to povoleno, ale uživatel by měl mít jasný způsob zavření prostřednictvím prvku rozhraní.

Často kladené otázky

Jaký je rozdíl mezi .fullScreen a .overFullScreen v iOS?

.fullScreen skrývá nadřazený ovladač a odstraňuje jej z hierarchie zobrazení. .overFullScreen zobrazuje modální ovladač nad nadřazeným, ale nadřazený zůstává v hierarchii a nadále přijímá události. overFullScreen je užitečný pro průhledná pozadí a vlastní animace vrstev.

Proč Apple změnil výchozí styl z fullScreen na pageSheet?

Apple změnil výchozí styl v iOS 13 pro zlepšení interakce s uživatelem. Page Sheet umožňuje vidět kontext nadřazené obrazovky a zavřít modální okno tahem, což urychluje navigaci. Full Screen Cover zůstává pro scénáře, kde je vyžadováno plné soustředění bez rozptylování pozadím.

Jak programově zavřít Full Screen Cover?

V UIKit zavolejte dismiss(animated:completion:) na presentingViewController nebo presentedViewController. V SwiftUI použijte hodnotu prostředí \.dismiss a zavolejte ji jako funkci. Pro programové zavření z nadřazeného ovladače změňte binding předaný do .fullScreenCover na false.

Funguje Full Screen Cover na iPad?

Ano, Full Screen Cover funguje na iPad. Pro iPad jsou k dispozici další styly: .formSheet (centrované okno pevné velikosti) a .currentContext (vzhledem k nadřazenému ovladači). Na iPad může Full Screen Cover vypadat jako Page Sheet, pokud modalPresentationStyle není vynuceně nastaven.

Jak zabránit zavření Full Screen Cover při ztrátě dat?

Na rozdíl od Page Sheet se Full Screen Cover nezavírá tahem, takže ztráta dat je možná pouze při programovém dismiss. Přepište metodu dismiss(animated:completion:) nebo použijte UIAdaptivePresentationControllerDelegate, který je volán před zavřením. Zobrazte UIAlertController s možnostmi: uložit, zrušit nebo zůstat na obrazovce.

Shrnutí

  • Full Screen Cover — styl modální prezentace iOS, který skrývá nadřazený obsah a zabírá celou obrazovku.
  • UIKit implementuje Full Screen Cover přes UIModalPresentationStyle.fullScreen s vlastními přechodovými animacemi.
  • SwiftUI poskytuje modifikátor .fullScreenCover s podporou matchedGeometryEffect pro plynulé přechody.
  • Full Screen se liší od Page Sheet absencí zavírání tahem a úplným překrytím nadřazeného obsahu.
  • Doporučuje se pro videopřehrávače, kameru, fotoeditory a další imerzivní scénáře.
  • Nedoporučuje se pro formuláře, nastavení a navigační sekvence uvnitř modálního okna.
  • Ztrátě dat zabraňte pomocí UIAdaptivePresentationControllerDelegate s dialogem potvrzení zavření.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také