UIKit — was es ist, Schlüsselkonzepte und Architektur

Autor: IT Sectr Veröffentlicht: 2026-04-30 Lesezeit: 10 Min.

UIKit ist ein Framework zur Erstellung grafischer Oberflächen in iOS- und macOS-Anwendungen. Das Set umfasst UIView, UIViewController, Steuerelemente und das Auto-Layout-System, mit dem sich adaptive und interaktive Bildschirme erstellen lassen. Laut Apple Developer Documentation (2025) enthält UIKit über 200 Klassen für die Arbeit mit Fenstern, Views, Animationen, Gesten und Text — es ist die Grundlage aller iPhone- und iPad-Anwendungen.

Wichtige Punkte

  • UIKit ist Apples Framework zum Erstellen von Oberflächen unter iOS, iPadOS und macOS mit einem imperativen Ansatz zur View-Verwaltung.
  • UIView ist die Basisklasse für alle visuellen Elemente: Schaltflächen, Textfelder, Bilder und Container.
  • UIViewController verwaltet den Bildschirmlebenszyklus: vom Laden der View bis zur Speicherfreigabe.
  • Auto Layout beschreibt die Positionierung von Elementen durch ein System von Constraints und passt die Oberfläche an verschiedene Bildschirmgrößen an.
  • Delegaten und dataSource sind das Schlüsselmuster für Tabellen und Sammlungen, das Daten von ihrer Anzeige trennt.

Was ist UIKit?

UIKit ist ein Framework von Apple, das Klassen zum Erstellen und Verwalten von Benutzeroberflächen unter iOS, iPadOS und macOS (über Mac Catalyst) bereitstellt. Es arbeitet auf Core Animation, Core Graphics und Quartz Core und abstrahiert das Low-Level-Rendering in High-Level-Objekte — Schaltflächen, Labels, Bilder und Container. UIKit debütierte mit iPhone OS 1 im Jahr 2007 und ist neben SwiftUI das primäre Framework für die iOS-Entwicklung.

Das Framework folgt einem imperativen Ansatz: Der Entwickler erstellt Instanzen der Klassen UIButton, UILabel, UIImageView, legt deren Eigenschaften (Farbe, Schriftart, Position) fest und fügt sie über addSubview zur View-Hierarchie hinzu. Jede Änderung der Oberfläche wird explizit vorgenommen — keine magischen Updates im Hintergrund. Dies unterscheidet UIKit von deklarativen Frameworks wie SwiftUI, bei denen die Zustandsbeschreibung die Oberfläche automatisch neu zeichnet.

Wichtige UIKit-Klassen

Das Framework umfasst mehrere Kategorien von Klassen. UIView ist das Basiselement, von dem alle visuellen Komponenten erben. UIWindow ist der Container der obersten Ebene, über den Views auf dem Bildschirm angezeigt werden. UIViewController verwaltet eine Reihe von Views und reagiert auf Bildschirmdrehungen, Tastatureinblendungen und Systembenachrichtigungen. UIApplication ist der Einstiegspunkt, der Touch-Ereignisse und Tastendrücke verarbeitet.

Für Text werden UILabel (statischer Text), UITextField (einzeilige Eingabe) und UITextView (mehrzeilige Eingabe) verwendet. Für Schaltflächen — UIButton, einschließlich System-, benutzerdefinierter und SF-Symbols-Iconografie. Für die Navigation — UINavigationController, UITabBarController und UISplitViewController. Insgesamt hat UIKit über 200 öffentliche Klassen.

UIKit-Architektur: Ebenen und View-Hierarchie

Die UIKit-Architektur ist auf Ebenen aufgebaut: Jede Ebene ist für einen eigenen Aspekt der Anzeige verantwortlich. Auf der untersten Ebene befindet sich Core Graphics — die Rendering-Engine für Pfade, Text und Bilder. Darüber liegt Core Animation, das die Ebenenkomposition (CALayer) und Animationen zwischen Zuständen verwaltet. UIKit baut darauf eine objektorientierte API auf: UIView, UIViewController und UIResponder.

Jede Anwendung hat eine View-Hierarchie — einen Baum, dessen Wurzel das UIWindow ist. Darunter befinden sich der UIViewController, seine View und darin verschachtelte Subviews. Touch-Ereignisse breiten sich entlang der Responder-Kette aus: von der am tiefsten verschachtelten View zu ihren Eltern und weiter zu UIApplication. Wenn kein Objekt die Berührung behandelt, wird sie ignoriert.

UIView und CALayer

Jede UIView enthält eine CALayer, die für das Pixel-Rendering auf dem Bildschirm zuständig ist. Die View verwaltet Berührungen und Barrierefreiheit; die Ebene verwaltet Grafiken — Schatten, cornerRadius, Rahmen, Transformation. Diese Trennung ermöglicht es, schwere Grafiken auf einen separaten Thread (Render-Server) auszulagern, ohne den Hauptthread zu blockieren. Apple empfiehlt, direkt mit CALayer zu arbeiten, wenn mehr als 200 Views auf dem Bildschirm sind — das reduziert die CPU-Last.

Die Responder-Kette im Detail

Die Responder-Kette beginnt mit dem Objekt, das zuerst ein Touch-Ereignis empfängt. Wenn es das Ereignis nicht behandelt (die Methode touchesBegan wurde nicht überschrieben), wird das Ereignis an den nächsten Responder in der Kette weitergegeben: next, superview, next responder, UIViewController, UIWindow, UIApplication, App Delegate. Dies ermöglicht das Abfangen globaler Gesten und Tastaturereignisse auf Szenenebene, ohne einen Handler zu jeder View hinzuzufügen.

Lebenszyklus von UIViewController

Jeder UIViewController durchläuft eine streng definierte Abfolge von Ereignissen. Der Lebenszyklus umfasst Phasen: Initialisierung, Laden der View, Erscheinen auf dem Bildschirm, Layout-Aktualisierung bei Drehung, Ausblenden, Verlassen des Bildschirms und Speicherfreigabe. Der Entwickler überschreibt die entsprechenden Methoden, um in jeder Phase eigenen Code auszuführen.

swift
class ProfileViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        loadUserProfile()
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        clearCache()
    }
}

In viewDidLoad wird die Oberfläche konfiguriert — Subviews werden erstellt, Constraints gesetzt, Delegaten abonniert. In viewWillAppear werden Operationen vor der Anzeige durchgeführt: Laden aktueller Daten aus dem Netzwerk, Aktualisieren von Werten. viewDidDisappear ist der Ort zum Abmelden von Benachrichtigungen und Bereinigen temporärer Daten. Der Aufruf von super ist in allen Überschreibungen obligatorisch, sonst bricht die Ereigniskette.

Speicherverwaltung und viewDidUnload

In älteren iOS-Versionen gab es die Methode viewDidUnload, die bei Speicherknappheit aufgerufen wurde. Seit iOS 6 wurde die Methode entfernt — UIKit entlädt jetzt automatisch die Views von Controllern, wenn sie nicht sichtbar sind. Der Entwickler muss lediglich alle View-Referenzen als weak deklarieren, damit ARC beim Erhalt einer Systemwarnung den Speicher korrekt freigeben kann.

Übergänge zwischen Controllern

UIKit unterstützt zwei Arten von Übergängen: Segue (über Storyboard) und programmatische Navigation über UINavigationController. Ein programmatischer Übergang sieht so aus: navigationController?.pushViewController(detailVC, animated: true). Dabei durchläuft der detailVC den normalen Lebenszyklus — viewDidLoad wird einmal aufgerufen, viewWillAppear jedes Mal beim Erscheinen.

Auto Layout und adaptives Layout

Auto Layout ist ein Positionierungssystem, das auf mathematischen Beziehungen (Constraints) basiert. Anstelle von fest codierten X- und Y-Koordinaten beschreibt der Entwickler Regeln: „Die Schaltfläche befindet sich rechts vom Label mit einem Abstand von 16pt“ oder „Die View erstreckt sich über die Bildschirmbreite mit 20pt Abstand links und rechts.“ Das System löst das resultierende Gleichungssystem zur Laufzeit und passt die Oberfläche an jede Bildschirmgröße an.

Constraints können im Interface Builder (per Drag & Drop) oder programmatisch in Swift festgelegt werden. Jeder Constraint ist eine Instanz der Klasse NSLayoutConstraint mit Parametern: firstItem, firstAttribute, relation, secondItem, secondAttribute, multiplier, constant. Constraints werden über isActive = true oder massenhaft über NSLayoutConstraint.activate() aktiviert.

Safe Area und Layout Margins

Mit der Einführung des iPhone X (2017) führte Apple die Safe Area ein — den Bildschirmbereich ohne Notch, abgerundete Ecken und Home-Bar-Indikator. Constraints sollten an view.safeAreaLayoutGuide und nicht an view gebunden werden. Layout Margins fügen der View einen Innenabstand hinzu, standardmäßig 8pt oder 16pt je nach Kontext. Die Verwendung von safeAreaLayoutGuide gewährleistet die korrekte Darstellung auf allen iPhone- und iPad-Generationen.

Constraint-Animation

Auto Layout unterstützt Animationen durch Ändern von Constraint-Konstanten. Aktualisieren Sie einfach die constant eines Constraints und rufen Sie UIView.animate mit layoutIfNeeded innerhalb des Animationsblocks auf. Das System berechnet die Position aller Views in der Hierarchie nahtlos neu. Diese Technik wird für ausklappbare Blöcke, adaptive Tastaturbereiche und Bildschirmausrichtungsänderungen verwendet.

Arbeiten mit Tabellen und Sammlungen

UITableView und UICollectionView sind zwei leistungsstarke UIKit-Werkzeuge zum Anzeigen von Listen und Gittern. UITableView eignet sich für vertikale einspaltige Listen (Chat, Einstellungen, Nachrichtenfeed). UICollectionView ist für Gitter, horizontale Listen, Karussells und benutzerdefinierte Layouts (Galerie, Produkte, Kalender) gedacht. Beide Klassen verwenden das Delegationsmuster, um Daten von der Darstellung zu trennen.

Die Datenquelle ist das UITableViewDataSource-Protokoll mit den obligatorischen Methoden numberOfRowsInSection und cellForRowAt. Der UITableViewDelegate behandelt Zellenberührungen, Zeilenhöhen und Scroll-Ereignisse. Der Reuse-Identifier-Mechanismus wiederverwendet Zellen, die den Bildschirm verlassen haben, was für die Leistung bei großen Listen entscheidend ist.

swift
class ContactsViewController: UITableViewController {

    private let contacts = ["Anna", "Boris", "Viktor"]

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UITableViewCell.self,
                           forCellReuseIdentifier: "cell")
    }

    override func tableView(_ tableView: UITableView,
                          numberOfRowsInSection section: Int) -> Int {
        return contacts.count
    }

    override func tableView(_ tableView: UITableView,
                          cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
                                                 for: indexPath)
        var content = cell.defaultContentConfiguration()
        content.text = contacts[indexPath.row]
        cell.contentConfiguration = content
        return cell
    }
}

Das Beispiel zeigt einen minimalen Controller zum Anzeigen eines String-Arrays. Die Zelle wird über UIListContentConfiguration konfiguriert — eine moderne API (iOS 14+), die die veralteten textLabel und detailTextLabel ersetzt hat. Die Registrierung der Zellenklasse in viewDidLoad ist obligatorisch, sonst stürzt die Anwendung mit einer Laufzeitausnahme ab.

UICollectionView und Compositional Layout

Ab iOS 13 empfiehlt Apple UICollectionViewCompositionalLayout zum Erstellen komplexer Layouts. Der Entwickler beschreibt Abschnitt, Gruppe, Element und deren Größen deklarativ — es entsteht ein Raster mit beliebiger Geometrie: Streifen, 2x2-Raster, Karussell oder Ornament. Compositional Layout hat das veraltete UICollectionViewFlowLayout für alle neuen Projekte ersetzt. In Kombination mit DiffableDataSource reduziert sich die Aktualisierung einer Sammlung auf einen einzigen apply(snapshot)-Aufruf, und Änderungsanimationen werden automatisch ausgeführt.

Swift-Codebeispiele

Im Folgenden finden Sie zwei praktische Beispiele für die Verwendung von UIKit in realen Aufgaben: Erstellen einer benutzerdefinierten View mit Schatten und abgerundeten Ecken sowie Behandeln einer Wischgeste zum Löschen eines Elements aus einer Liste.

swift
extension UIView {
    func applyCardStyle() {
        layer.cornerRadius = 12
        layer.shadowOpacity = 0.15
        layer.shadowRadius = 8
        layer.shadowOffset = CGSize(width: 0, height: 2)
        layer.masksToBounds = false
    }
}

@objc private func handleSwipe(_ gesture: UISwipeGestureRecognizer) {
    guard let swipedView = gesture.view else { return }
    UIView.animate(withDuration: 0.3) {
        swipedView.alpha = 0
        swipedView.transform = CGAffineTransform(translationX: 300, y: 0)
    } completion: { _ in
        swipedView.removeFromSuperview()
    }
}

Die Erweiterung applyCardStyle fügt jeder View Schatten und abgerundete Ecken hinzu — nützlich für Produktkarten, Profile und Benachrichtigungen. Die Methode handleSwipe mit Animation löscht ein Element, wenn der Benutzer nach rechts darüber wischt. Der Handler wird über addGestureRecognizer mit einer UISwipeGestureRecognizer(direction: .right)-Konfiguration zur View hinzugefügt. Die Einstellung masksToBounds = false ist wichtig, damit der Schatten nicht durch die View-Grenzen abgeschnitten wird.

Für komplexere Oberflächen verwenden Sie UIStackView — einen Container, der verschachtelte Views automatisch horizontal oder vertikal anordnet. Stack View vereinfacht das Layout: Sie müssen keine Constraints für jedes Element festlegen, sondern nur einen Constraint für den Stack selbst.

Häufig gestellte Fragen

Was ist der Unterschied zwischen frame und bounds bei UIView?

Frame ist ein Rechteck in den Koordinaten der Superview (Position + Größe). Bounds ist ein Rechteck in den eigenen Koordinaten der View (beginnt immer bei 0,0). Frame ändert sich bei Drehung und Skalierung; bounds nicht.

Wie gibt man Speicher von nicht verwendeten Views frei?

UIKit entlädt automatisch die Views ausgeblendeter Controller. Der Entwickler muss lediglich View-Eigenschaften als weak var deklarieren, damit ARC bei einer Systemwarnung Speicher freigeben kann.

Sollte man Storyboard im Jahr 2026 verwenden?

Für neue Projekte empfiehlt Apple SwiftUI. Wenn das Projekt UIKit verwendet — verwenden Sie XIB für einzelne Bildschirme oder programmatisches Layout über SnapKit. Storyboard erzeugt Merge-Konflikte und verlangsamt den Build.

Wie implementiert man den dunklen Modus in UIKit?

Verwenden Sie UIColor mit traitCollection-Unterstützung: UIColor { $0.userInterfaceStyle == .dark ? ... : ... }. Aktivieren Sie den dunklen Modus in Info.plist mit dem Schlüssel UIUserInterfaceStyle.

Wodurch ist UIStackView besser als manuelle Constraints?

UIStackView berechnet die Positionen und Größen verschachtelter Views automatisch basierend auf alignment, distribution und spacing. Es reduziert den Constraint-Code um 60–80% und vereinfacht die Anpassung an verschiedene Bildschirme.

Zusammenfassung

  • UIKit ist Apples primäres Framework zum Erstellen von iOS-, iPadOS- und macOS-Oberflächen mit einem imperativen Ansatz.
  • UIView verwaltet Rendering und Berührungen; seinen grafischen Teil bearbeitet die CALayer-Ebene, die in einem separaten Thread läuft.
  • UIViewController folgt einem strengen Lebenszyklus: von viewDidLoad bis zur Speicherfreigabe, mit der Möglichkeit, jede Phase zu überschreiben.
  • Auto Layout ersetzt feste Koordinaten durch ein Constraints-System und passt die Oberfläche an jede Bildschirmgröße und Ausrichtung an.
  • UITableView und UICollectionView mit Reuse-Identifiers gewährleisten Leistung bei großen Listen und unterstützen modernes Compositional Layout.
  • UIStackView vereinfacht das Layout von View-Sequenzen und reduziert den Constraint-Code um 60–80%.
  • Für neue Projekte empfiehlt Apple SwiftUI, aber UIKit bleibt für die Unterstützung älterer iOS-Versionen und komplexer benutzerdefinierter Oberflächen relevant.

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.

Projekt besprechen

Lesen Sie auch