Full Screen Cover — a modális prezentáció egy stílusa iOS-ben, amelyben az új képernyő a teljes kijelzőt elfoglalja a szülő tartalom láthatósága nélkül. Ellentétben a Page Sheettel, a Full Screen Cover teljesen elrejti az előző képernyőt, és médiatartalmakhoz, fotószerkesztőkhöz és hitelesítési képernyőkhöz használatos. A Apple Developer, 2025 szerint ez a stílus iOS 13-ig volt alapértelmezett, de továbbra is előnyben részesített a magával ragadó forgatókönyvekhez. A SwiftUI-ben a .fullScreenCover módosító deklaratív API-t biztosít a teljes képernyős prezentációhoz.
Főbb pontok
Full Screen Cover — a modális prezentáció egy stílusa iOS-ben, amelyben a bemutatott vezérlő az eszköz teljes képernyőjét elfoglalja. A szülő tartalom teljesen elrejtésre kerül, ami magával ragadó hatást kelt és a felhasználót az aktuális feladatra összpontosítja.
iOS 13 előtt a Full Screen Cover volt az egyetlen modális prezentációs stílus iPhone-on. Az összes present(_:animated:completion:) hívás alapértelmezetten .fullScreen-t használt. iOS 13-tól kezdve az Apple megváltoztatta az alapértelmezett stílust .automatic-ra, ami iPhone esetén .pageSheet-et választ. A Full Screen Cover azonban továbbra is elérhető marad, és olyan forgatókönyvekhez használatos, ahol a teljes összpontosítás fontos.
Ellentétben a Page Sheettel, a Full Screen Cover nem teszi lehetővé a szülő tartalommal való interakciót, és nem mutatja azt a modális ablak alatt. A felhasználó nem zárhatja be a Full Screen Covert lefelé húzással — a bezáráshoz programozott dismiss(animated:completion:) hívás vagy egy bezáró gomb szükséges magán a képernyőn. Ezt a viselkedést fontos figyelembe venni az UX tervezésekor.
Page Sheet — a második fő modális prezentációs stílus, amely iOS 13-ban jelent meg. A Page Sheet egy kártyaként jelenik meg felül hézaggal, amely alatt a szülő képernyő látható. A felhasználó lefelé húzással bezárhatja a Page Sheetet. Ezzel szemben a Full Screen Cover elrejti a szülő tartalmat, és nem támogatja a húzással történő bezárást.
| Jellemző | Full Screen Cover | Page Sheet |
|---|---|---|
| Háttér lefedése | Teljes, a szülő tartalom nem látható | Részleges, a szülő látható a kártya alatt |
| Bezárás húzással | Nem, csak programozottan vagy gombbal | Igen, a lefelé húzás bezárja |
| Tipikus alkalmazás | Videó, kamera, fotószerkesztő, PDF | Űrlapok, beállítások, részletes nézet |
| Megjelenítési animáció | Alulról felfelé, teljes képernyő | Alulról felfelé, kártya hézaggal |
| Elérhetőség | iOS 2+ | iOS 13+ |
A választás a Full Screen Cover és a Page Sheet között a tartalomtól és kontextustól függ. Ajánlott a Full Screen Covert használni olyan tartalmakhoz, amelyek teljes figyelmet igényelnek: videó teljes képernyős módban, fotó előnézet, dokumentumok szkennelése. Page Sheet — olyan feladatokhoz, ahol a szülő képernyő kontextusa fontos: szerkesztő űrlapok, opciók kiválasztása, részletek megtekintése.
UIKit biztosítja a UIModalPresentationStyle.fullScreen konstanst a modális prezentációs stílus konfigurálásához. Ennek a tulajdonságnak a UIViewController-en történő beállítása a present hívás előtt garantálja, hogy a vezérlő teljes képernyőn jelenik meg. A vezérlő kezeli a billentyűzet megjelenésekor és a rendszeresemények feldolgozásakor mutatott viselkedést is.
A .fullScreen stílus beállítása után ajánlott a presentationController?.delegate konfigurálása a bezárási események kezeléséhez. A UIAdaptivePresentationControllerDelegate delegált lehetővé teszi a bezárási kísérlet elfogását és az adatvesztés megelőzését. Ellentétben a Page Sheettel, a Full Screen Cover esetében a delegált csak programozott dismiss híváskor aktiválódik.
A Full Screen Cover helyesen kezeli a képernyő forgatását és a billentyűzet megjelenését. Forgatáskor a modális vezérlő automatikusan alkalmazkodik az új tájoláshoz. A UIKeyboardWillShowNotification lehetővé teszi a tartalom felfelé tolását a billentyűzet megjelenésekor, hogy a szövegmezők láthatóak maradjanak. Ellentétben a Page Sheettel, a Full Screen Cover nem változtatja meg a méretét a billentyűzet megjelenésekor.
let playerVC = VideoPlayerViewController()
playerVC.modalPresentationStyle = .fullScreen
playerVC.modalTransitionStyle = .crossDissolve
present(playerVC, animated: true) {
playerVC.startPlayback()
}
// Elutasítás
dismiss(animated: true) {
print("Lejátszó elutasítva")
}
SwiftUI biztosítja a .fullScreenCover módosítót a teljes képernyős modális ablakok deklaratív létrehozásához. Ellentétben a .sheettel (Page Sheet), a .fullScreenCover a .fullScreen stílust hozza létre analóg viselkedéssel: a tartalom teljes lefedése és a húzással történő bezárás hiánya.
A módosító egy Bool bindinget vagy egy opcionális azonosítható objektumot fogad el. Amikor a binding true-ra van állítva, a SwiftUI animálja a teljes képernyős ablak megjelenését. Az adatok átviteléhez az onDismiss paraméter és egy tartalommal rendelkező closure használatos. A \.dismiss környezeti érték lehetővé teszi a modális ablak belülről történő bezárását.
A választás a .fullScreenCover és a .sheet között SwiftUI-ben analóg a UIKithez: .fullScreenCover magával ragadó tartalomhoz, .sheet kártyákhoz. SwiftUI automatikusan kiválasztja a megfelelő bezárási viselkedést: a .sheet húzással zárható, a .fullScreenCover — csak programozottan. A módosítók kombinálhatóak ugyanabban a View hierarchiában.
struct CameraView: View {
@State private var showCamera = false
var body: some View {
Button("Kamera megnyitása") {
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("Rögzítés") { dismiss() }
.foregroundColor(.white)
}
}
}
}
Full Screen Cover támogatja az egyedi animációkat a UIModalTransitionStyle segítségével UIKitben és az egyedi átmeneteket SwiftUI-ben. A standard stílusok: .coverVertical (alulról felfelé), .crossDissolve (fokozatos megjelenés), .flipHorizontal (átfordítás) és .partialCurl (oldal effektus).
Teljesen egyedi animációhoz implementálja a UIViewControllerAnimatedTransitioning protokollt. Ez lehetővé teszi az animáció időtartamának és magának az átmenetnek a meghatározását az animateTransition(using:) metóduson keresztül. Az animációs vezérlő az UINavigationControllerDelegate vagy UIViewControllerTransitioningDelegate delegált segítségével kerül kijelölésre.
SwiftUI-ben a .fullScreenCover egyedi átmenetei a matchedGeometryEffect segítségével hozhatók létre. Ez a módosító egy elem áthelyezését animálja a szülő View-ból a teljes képernyős ablakba. Például egy fénykép miniatűrre kattintva az simán kiteljesedik a teljes képernyőre, folytonossági hatást keltve. A MatchedGeometryEffect id-val és namespace-szel működik, összekötve az elemet a forrás és cél pozícióban.
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()
}
}
}
Full Screen Cover olyan forgatókönyvekhez ajánlott, ahol a tartalomnak a teljes képernyőt kell elfoglalnia a szülő interfész általi zavarás nélkül. Az Apple HIG három fő kategóriát különböztet meg: média tartalom, tartalomkészítő eszközök és ideiglenes rendszerinterfészek.
Videolejátszók, fotómegtekintés, PDF és képregény olvasás — tipikus példái a Full Screen Cover használatának. Az AVPlayerViewController iOS-ben automatikusan teljes képernyős módot használ landscape módba váltáskor. Az olyan fotószerkesztők, mint az Adobe Lightroom, teljes képernyős szerkesztőt nyitnak a képkönyvtár felett.
Kamera, dokumentumszkenner, hangfelvétel — olyan feladatok, amelyek a felhasználó teljes figyelmét igénylik. A UIImagePickerController iOS 14-ig Full Screen Covert használt a kamerához. iOS 14-től a rendszerválasztó Page Sheetet használ, de a fejlesztő kikényszerítheti a .fullScreen-t egyedi kamerához.
Ne használja a Full Screen Covert: regisztrációs űrlapokhoz (a Page Sheet előnyösebb), szövegbeviteli képernyőkhöz, ahol a szülő oldal kontextusa fontos, és szekvenciális navigációhoz a modális ablakon belül. A Material Design is ajánlja a rendszer vissza gomb blokkolásának elkerülését — iOS-ben ez megengedett, de a felhasználónak rendelkeznie kell egyértelmű bezárási móddal egy UI elemen keresztül.
Gyakran ismételt kérdések
.fullScreen elrejti a szülő vezérlőt és eltávolítja a megjelenítési hierarchiából. .overFullScreen a modális vezérlőt a szülő felett jeleníti meg, de a szülő a hierarchiában marad és továbbra is fogadja az eseményeket. Az overFullScreen hasznos átlátszó hátterekhez és egyedi réteganimációkhoz.
Az Apple iOS 13-ban változtatta meg az alapértelmezett stílust a felhasználói interakció javítása érdekében. A Page Sheet lehetővé teszi a szülő képernyő kontextusának látását és a modális ablak húzással történő bezárását, ami gyorsítja a navigációt. A Full Screen Cover azokra a forgatókönyvekre marad, ahol teljes összpontosítás szükséges a háttér általi zavarás nélkül.
UIKitben hívja meg a dismiss(animated:completion:) függvényt a presentingViewController vagy presentedViewController objektumon. SwiftUI-ben használja a \.dismiss környezeti értéket és hívja meg függvényként. Programozott bezáráshoz a szülő vezérlőből változtassa meg a .fullScreenCover-nek átadott bindingot false-ra.
Igen, a Full Screen Cover működik iPaden. iPadhez további stílusok érhetők el: .formSheet (középre igazított, rögzített méretű ablak) és .currentContext (a szülő vezérlőhöz viszonyítva). iPaden a Full Screen Cover úgy nézhet ki, mint a Page Sheet, ha a modalPresentationStyle nincs kényszerítve.
Ellentétben a Page Sheettel, a Full Screen Cover nem zárható húzással, így adatvesztés csak programozott dismiss esetén lehetséges. Írja felül a dismiss(animated:completion:) metódust, vagy használja a UIAdaptivePresentationControllerDelegate-t, amely a bezárás előtt hívódik meg. Jelenítsen meg egy UIAlertController-t a következő opciókkal: mentés, megszakítás vagy a képernyőn maradás.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is