Modale Präsentation ist eine Methode, einen Bildschirm über dem aktuellen Kontext anzuzeigen und dabei die Interaktion mit der vorherigen Oberfläche zu blockieren. In der mobilen Entwicklung werden modale Fenster für fokussierte Aufgaben verwendet: Dateneingabe, Aktionsbestätigung, Autorisierung und Optionenauswahl. Laut Apple HIG, 2025 sollten modale Präsentationen nicht mehr als 20 % der Navigationsszenarien in einer App ausmachen. In Android wird Modalität über DialogFragment, BottomSheet und Activity mit bestimmten Launch-Flags implementiert.
Wichtige Punkte
Modale Präsentation ist ein Navigationsmuster, bei dem ein neuer Bildschirm über dem aktuellen erscheint und vorübergehend die Interaktion mit dem übergeordneten Inhalt blockiert. Der Benutzer muss die modale Aufgabe (Abbrechen, Speichern, Schließen) explizit abschließen, um zum vorherigen Zustand zurückzukehren.
Modalität löst eine kognitive Aufgabe: Sie konzentriert die Aufmerksamkeit des Benutzers auf eine einzelne Aktion, ohne Ablenkung durch die restliche Oberfläche. Dies ist besonders wichtig für Registrierungsformulare, Bestätigungsdialoge, Dateiauswahl und Autorisierung über Dienste Dritter. Die Human Interface Guidelines von Apple empfehlen, Modalität nur für Aufgaben zu verwenden, die vor dem Fortfahren abgeschlossen werden müssen.
Im Gegensatz zu modalen Web-Fenstern kann die mobile modale Präsentation vollbildschirm (den gesamten Bildschirm einnehmend) oder teilweise (Page Sheet, Bottom Sheet) sein. Die Wahl des Typs hängt vom Aufgabenkontext und den Plattformkonventionen ab. iOS tendiert für die meisten Szenarien zu Page Sheet und lässt Full Screen für Videoplayer und Fotobearbeitungsprogramme.
Push-Präsentation (Stack-Navigation) fügt einen Bildschirm zum Navigationsstapel hinzu und zeigt automatisch eine Zurück-Schaltfläche an. Der Benutzer kann jederzeit zum vorherigen Bildschirm zurückkehren. Die modale Präsentation erfordert dagegen einen expliziten Abschluss: Die Zurück-Schaltfläche fehlt entweder oder schließt das modale Fenster, anstatt zum vorherigen Bildschirm zurückzukehren.
Die Hauptunterschiede zwischen modaler und Push-Präsentation: Modale Präsentation blockiert die Rückwärtsnavigation ohne Datenverlust, erfordert eine Aktion zum Schließen (Save, Cancel, Done) und stellt in der Regel eine separate Aufgabe dar. Push-Präsentation bewahrt die Navigationshierarchie, fügt automatisch eine Zurück-Schaltfläche hinzu und eignet sich für die sequenzielle Inhaltsbetrachtung.
| Eigenschaft | Modale Präsentation | Push-Präsentation |
|---|---|---|
| Rückwärtsblockierung | Ja, erfordert explizite Aktion | Nein, Zurück-Button immer verfügbar |
| Typische Verwendung | Formulare, Autorisierung, Auswahl | Detailansicht, Navigation |
| Animation | Von unten nach oben (iOS), Schieben (Android) | Von rechts nach links (iOS) |
| Navigationsstapel | Nicht zum Hauptstapel hinzugefügt | Zum Stapel hinzugefügt |
In der Praxis hängt die Wahl zwischen Modal und Push vom Kontext ab. Es wird empfohlen, Modalität für Aufgaben zu verwenden, die der Benutzer vor dem Fortfahren abschließen muss, und Push für die sequenzielle Inhaltserkundung. Das Mischen von Mustern auf demselben Bildschirm führt zu Verwirrung und beeinträchtigt die Benutzererfahrung.
iOS bietet mehrere modale Präsentationsstile über die Aufzählung UIModalPresentationStyle. UIKit unterstützt .fullScreen (Vollbild), .pageSheet (Karte mit oberem Rand), .formSheet (zentriertes Fenster auf iPad) und .automatic (System wählt basierend auf Kontext). Seit iOS 13 ist der Standardstil .automatic, der für iPhone .pageSheet auswählt.
Die grundlegende UIKit-Methode für die modale Präsentation ist present(_:animated:completion:). Der Controller, der die Methode aufruft, wird zum presentingViewController, und der neue wird zum presentedViewController. Das Schließen erfolgt über dismiss(animated:completion:). SwiftUI bietet den .sheet-Modifikator für ein ähnliches Verhalten.
Der deklarative Ansatz von SwiftUI verwendet die Modifikatoren .sheet und .fullScreenCover. Ersterer erstellt ein Page Sheet, letzterer eine vollbildschirm-modale Präsentation. Beide akzeptieren ein Binding auf einen Bool oder ein identifizierbares Objekt, das die Sichtbarkeit des modalen Fensters steuert. Das Schließen erfolgt, wenn das Binding auf false gesetzt wird oder dismiss aus der Umgebung aufgerufen wird.
struct ContentView: View {
@State private var showModal = false
var body: some View {
Button("Formular öffnen") {
showModal = true
}
.sheet(isPresented: $showModal) {
RegistrationForm()
}
}
}
struct RegistrationForm: View {
@Environment(\.dismiss) private var dismiss
var body: some View {
Button("Speichern") { dismiss() }
}
}
Android hat keine einheitliche API für die modale Präsentation wie iOS. Stattdessen bietet die Plattform mehrere Mechanismen: DialogFragment für Dialogfenster, BottomSheetDialogFragment für untere Bedienfelder und Activity mit NEW_TASK- und CLEAR_TOP-Flags für modale Bildschirme. Jetpack Compose führte eine einheitliche Dialog-Komponente für alle Arten von modalen Fenstern ein.
DialogFragment ist die Basisklasse für modale Fenster im Android SDK. Es verwaltet den Lebenszyklus des Dialogs, behandelt die Bildschirmdrehung und speichert den Zustand. Das Fragment wird über der Activity angezeigt, ohne den Navigationsstapel zu blockieren. Das Schließen erfolgt über dismiss() oder durch Antippen außerhalb des Dialogbereichs, wenn setCancelable(true) ist.
BottomSheetDialogFragment zeigt ein modales Fenster als Bereich an, der von unten aufsteigt. Dieses Muster ist in Material Design für die Optionenauswahl, Freigabe und Schnellaktionen beliebt. Das BottomSheet kann eine feste Höhe oder erweiterbar (Peek-Höhe + volle Höhe) sein. In Compose wird ModalBottomSheet aus der Material3-Bibliothek verwendet.
@Composable
fun ModalScreen(onDismiss: () -> Unit) {
Dialog(onDismissRequest = onDismiss) {
Card(
modifier = Modifier.padding(16.dp)
) {
Column {
Text("Modales Formular", style = MaterialTheme.typography.headlineSmall)
Button(onClick = onDismiss) {
Text("Schließen")
}
}
}
}
}
Modale Fenster sind ein leistungsstarkes UX-Werkzeug, aber ihre übermäßige Verwendung beeinträchtigt die Benutzererfahrung. Apple HIG und Google Material Design stimmen in den Empfehlungen überein: Modalität sollte für fokussierte Aufgaben verwendet werden und 20 % aller Navigationsaktionen nicht überschreiten.
Modale Fenster eignen sich für Szenarien: Dateneingabe (Registrierungsformulare, Profile), Bestätigung (Löschung, Sendung), Auswahl (Datumsauswahl, Dateimanager) und Autorisierung (OAuth, Firebase Auth). Wenn die Aufgabe weniger als 30 Sekunden dauert und eine Kontextblockierung erfordert, wählen Sie Modalität.
Verwenden Sie keine modale Präsentation für: sequenzielle Inhaltsbetrachtung (Push verwenden), Fehleranzeige (Toast oder Snackbar verwenden), Werbung und Werbeangebote ohne explizite Benutzeranfrage. Material Design empfiehlt, verschachtelte modale Fenster zu vermeiden – dies verwirrt den Benutzer und stört die Navigationshierarchie.
Für modale Fenster mit Textfeldern muss der Verlust des Tastaturfokus behandelt werden. Wenn die Tastatur erscheint, sollte sich das modale Fenster nach oben verschieben, damit der Benutzer den eingegebenen Text sehen kann. UIKeyboardWillShowNotification in iOS und adjustResize in Android lösen diese Aufgabe.
Schauen wir uns die Implementierung der modalen Präsentation auf beiden Plattformen an. Das Swift-Beispiel zeigt die Konfiguration von UIModalPresentationStyle.pageSheet mit einem Delegaten zur Behandlung des Schließens. Das Kotlin-Beispiel zeigt DialogFragment mit einem benutzerdefinierten Layout und Zustandserhaltung.
let modalVC = ModalViewController()
modalVC.modalPresentationStyle = .pageSheet
if let sheet = modalVC.sheetPresentationController {
sheet.detents = [.medium(), .large()]
sheet.prefersGrabberVisible = true
}
modalVC.presentationController?.delegate = self
present(modalVC, animated: true)
// MARK: - UIAdaptivePresentationControllerDelegate
extension ViewController: UIAdaptivePresentationControllerDelegate {
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
print("Modal geschlossen")
}
}
class ModalDialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_modal, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
view.findViewById<Button>(R.id.closeButton).setOnClickListener {
dismiss()
}
}
}
Häufig gestellte Fragen
Verwenden Sie modale Präsentation für fokussierte Aufgaben, die der Benutzer vor dem Fortfahren abschließen muss: Formulare, Bestätigungen, Autorisierung. Push eignet sich für die sequenzielle Inhaltsbetrachtung, bei der der Benutzer frei zurücknavigieren kann. Ein modales Fenster sollte keine Navigation in sich enthalten.
Seit iOS 13 wählt der Standardstil .automatic für iPhone .pageSheet. .pageSheet ist für die meisten Szenarien geeignet (Formulare, Details). .fullScreen ist für Medieninhalte (Video, Fotobearbeitung). .formSheet ist für iPad-Apps, die ein zentriertes Fenster benötigen.
Jetpack Compose bietet die Dialog-Komponente für einfache modale Fenster und ModalBottomSheet für untere Bedienfelder. Dialog akzeptiert onDismissRequest und Inhalt im Compose-Stil. Verwenden Sie rememberSaveable innerhalb des Dialogs zur Zustandserhaltung.
Apple HIG und Material Design empfehlen keine verschachtelten modalen Fenster. Wenn ein Benutzer ein modales Fenster über einem anderen modalen Fenster öffnet, verliert er den Kontext und kann in der Hierarchie verwirrt werden. Verwenden Sie stattdessen einen Schrittindikator oder ein Assistentenmuster mit einem einzigen modalen Fenster.
Verwenden Sie UIAdaptivePresentationControllerDelegate in iOS (Methode presentationControllerShouldDismiss) oder OnBackPressedDispatcher in Android. Bei nicht gespeicherten Änderungen zeigen Sie einen AlertDialog mit Optionen an: Speichern, Änderungen verwerfen oder auf dem Bildschirm bleiben. Dies verhindert versehentlichen Datenverlust durch den Benutzer.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch