Skip to content
Alle Artikel

iPhone Duo Size Classes: gefaltet, halb offen und aufgeklappt erklärt

Welche Size Classes das iPhone Duo gefaltet, halb offen und offen meldet, warum Sie sich nach Size Classes statt Ausrichtung richten, mit SwiftUI- und UIKit-Code.

Von der AppleDuo-RedaktionVeröffentlicht 7 Min. Lesezeit

Auch verfügbar auf:EnglishEspañolFrançais日本語Türkçe

Auf dieser Seite
  1. Welche Size Classes meldet das iPhone Duo in jeder Haltung?
  2. Warum Size Classes statt Ausrichtung auf dem iPhone Duo verwenden?
  3. Wie lese ich Size Classes in SwiftUI aus?
  4. Wie lese ich Size Classes in UIKit mit traitCollection aus?
  5. Wie funktionieren Size Classes in den Bereichen einer ArrangementView?
  6. Wie teste ich iPhone Duo Haltungen in Xcode Device Hub?
  7. Die wichtigsten Punkte

Wenn Sie nur Zeit für eine einzige Änderung haben, bevor Ihre App auf das iPhone Duo trifft, dann sollten es die Size Classes sein. Das Gerät hat zwei Displays und mehrere Haltungen, und jede Haltung gibt Ihrer App unterschiedlich viel Platz. Wer die Size Classes auf dem iPhone Duo richtig behandelt, bekommt ein Layout, das in allen Haltungen funktioniert, ohne ein einziges Mal das Gerätemodell zu prüfen.

Die Kurzfassung stammt vom iOS-Entwickler @sarunw: Gefaltet ist das iPhone Duo ein iPhone, aufgeklappt ein iPad. Dieser Beitrag erklärt, was das für jede Haltung bedeutet, warum die Ausrichtung das falsche Signal ist und wie Sie Size Classes in SwiftUI und UIKit auslesen. Alles hier basiert auf Apples Tech Talks, Apples Developer Forums und zitierten Entwicklerberichten. Die APIs erscheinen mit iOS 27.1 und Xcode 27.1, und Details können sich zwischen Releases ändern.

Welche Size Classes meldet das iPhone Duo in jeder Haltung?

Eine Size Class ist eine grobe Beschreibung des Platzes, den Ihre App hat: compact oder regular, horizontal und vertikal. Auf dem iPhone Duo hängt die Kombination davon ab, welches Display aktiv ist, und das wiederum davon, wie weit das Gerät geöffnet ist.

Im Tech Talk Prepare your app for iPhone Duo heißt es, das äußere Display „verhält sich wie andere iPhone-Modelle“, und das innere Display meldet in beide Richtungen regular, was Platz für Inhalte wie Seitenleisten lässt. Die Aufschlüsselung von @sarunw ergänzt die halb offene Haltung und beide Ausrichtungen:

HaltungDisplayHorizontalVertikalVerhält sich wie
Geschlossen, HochformatÄußeresCompactRegulariPhone im Hochformat
Geschlossen, QuerformatÄußeresCompactCompactiPhone im Querformat
Halb offen, wie ein BuchInneresRegularRegulariPad
Aufgeklappt, HochformatInneresRegularRegulariPad
Aufgeklappt, QuerformatInneresRegularRegulariPad

Ein Hinweis zu den Begriffen: @sarunw verwendet „folded“ (gefaltet) im Sinne von geschlossen. Apples Tech Talks sprechen bei der halb offenen Haltung von „partially folded, like a book“ (teilweise gefaltet, wie ein Buch). In diesem Beitrag bedeutet „geschlossen“, dass das äußere Display genutzt wird, und „halb offen“, dass das innere Display am Scharnier abgeknickt ist.

Zur Einordnung der Größen: Pasquale Pillitteri gibt das äußere Display mit 466 × 678 Punkten und das innere Display mit 626 × 890 Punkten im Hochformat an. Sie sollten nicht gegen diese Zahlen programmieren, aber sie erklären, warum das innere Display eine reguläre Breite erhält: Es ist im Hochformat breiter als jedes iPhone.

Warum Size Classes statt Ausrichtung auf dem iPhone Duo verwenden?

Die Ausrichtung war früher eine brauchbare Abkürzung für die Frage „Ist Platz für eine zweite Spalte?“. Auf dem iPhone Duo ist sie das nicht. Apples Empfehlung ist eindeutig: Prüfen Sie für das Layout nicht die Ausrichtung, sondern verwenden Sie Size Classes. Zwei Fakten machen die Ausrichtung hier unzuverlässig.

  • Das innere Display ignoriert Ihre unterstützten Ausrichtungen. Apple sagt, dass das innere Display die unterstützten Interface-Ausrichtungen Ihrer App nicht berücksichtigt. Wenn Sie die App auf Hochformat festgelegt haben und nach Ausrichtung verzweigen, bekommen Sie Layouts, die Sie nie geplant haben.
  • Beide Ausrichtungen sind auf dem inneren Display regular. Hoch- und Querformat auf dem inneren Display melden dieselben Size Classes, eine Ausrichtungsprüfung sagt Ihnen also nichts darüber, wie viel Breite Sie haben.

Apples Antworten in den Forums sagen dasselbe über Geräteprüfungen. In einem Thread riet ein DTS-Engineer, nicht in Kategorien des konkreten Bildschirms zu denken, sondern nur in dem verfügbaren Platz, den Sie für Ihr Layout haben. In einem anderen empfahl ein Apple Evangelist, gerätespezifische Logik zu vermeiden, auf Size Classes zu setzen und alle Ausrichtungen zu unterstützen. Das gilt auch für iPhone-Apps, deren Größe iOS 27 jetzt auf dem iPad und im iPhone Mirroring auf dem Mac ändern kann.

Es gibt auch keinen speziellen Trait für die Haltung. Auf die Frage, ob UITraitCollection den Falz offenlegt, antwortete ein Apple-Engineer in Thread 848007, dass es keine UITraitCollection-Traits der genannten Art gibt. Size Classes steuern das Layout. Reserved Regions und die Hinge-APIs kümmern sich um den Falz selbst.

Wie lese ich Size Classes in SwiftUI aus?

SwiftUI legt beide Size Classes in das Environment. Lesen Sie sie in der View aus, die die Layout-Entscheidung trifft, und SwiftUI rendert diese View neu, wenn das Gerät geöffnet, geschlossen oder gedreht wird. Die Environment-Keys sind dieselben, die Apple im Tech Talk zeigt.

struct LibraryView: View {
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass
    @Environment(\.verticalSizeClass) private var verticalSizeClass

    var body: some View {
        if horizontalSizeClass == .regular {
            // Inneres Display: Platz für Liste und Detail nebeneinander.
            HStack(spacing: 0) {
                AlbumList()
                AlbumDetail()
            }
        } else {
            // Äußeres Display: eine Spalte, wie auf jedem iPhone.
            AlbumList()
        }
    }
}

Dieses Beispiel wechselt allein anhand der Breite zwischen einem einspaltigen und einem zweispaltigen Layout. Nutzen Sie die vertikale Size Class für Entscheidungen zur Höhe, zum Beispiel um einen großen Header auszublenden, wenn das äußere Display im Querformat ist und beide Werte compact sind.

Bevor Sie das von Hand schreiben, prüfen Sie, ob ein System-Container es bereits erledigt. Apple weist darauf hin, dass NavigationSplitView im geschlossenen Zustand zu einem einzelnen Stack zusammenfällt und seine Spalten im aufgeklappten Zustand nebeneinander oder überlagert anordnet und dass TabView sich an alle Haltungen anpasst. Wenn Ihre App diese Container nutzt, ist ein Großteil der Size-Class-Arbeit bereits erledigt.

Wie lese ich Size Classes in UIKit mit traitCollection aus?

In UIKit liegen die Size Classes in der Trait Collection jeder View und jedes View Controllers: traitCollection.horizontalSizeClass und traitCollection.verticalSizeClass. Seit iOS 17 können Sie sich für Trait-Änderungen registrieren, statt das veraltete traitCollectionDidChange(_:) zu überschreiben.

final class LibraryViewController: UIViewController {
    private let detailContainer = UIView()
    private var listWidthConstraint: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
        registerForTraitChanges(
            [UITraitHorizontalSizeClass.self, UITraitVerticalSizeClass.self]
        ) { (self: Self, _: UITraitCollection) in
            self.updateLayout()
        }
        updateLayout()
    }

    private func updateLayout() {
        let isWide = traitCollection.horizontalSizeClass == .regular
        detailContainer.isHidden = !isWide
        listWidthConstraint.isActive = isWide
    }
}

Hier zeigt der Controller seinen Detail-Container nur bei regulärer Breite an und aktualisiert sich, sobald sich eine der Size Classes ändert, etwa wenn das Gerät aufgeklappt wird. Wie bei SwiftUI gilt: Bevorzugen Sie UISplitViewController und UITabBarController, wo sie passen, denn laut Apple passen sie sich automatisch an den Falz an.

Zwei verwandte Gewohnheiten aus demselben Tech Talk helfen, damit sich Size-Class-Layouts korrekt verhalten. Ersetzen Sie UIScreen.main.scale durch traitCollection.displayScale, denn „main screen“ ist auf einem Gerät mit zwei Displays mehrdeutig. Und behandeln Sie die Safe Area Insets jeder Seite unabhängig, denn auf dem iPhone Duo sind sie oft ungleichmäßig.

Wie funktionieren Size Classes in den Bereichen einer ArrangementView?

ArrangementView, neu in iOS 27.1, platziert eine primäre und eine sekundäre View nebeneinander, gestapelt oder überlagert, je nach Platz und Haltung. Apples Talk Strike a pose with adaptive layouts on iPhone Duo beschreibt die Faktoren, die sie für ein Layout abwägt: die horizontale und vertikale Size Class der View, das Seitenverhältnis der View und ob eine Division-Region wie der Falz aktiv ist.

Die praktische Konsequenz: Lesen Sie die Size Classes in jedem Bereich aus, statt anzunehmen, dass ein Bereich die Werte des Fensters erbt. Ein Bereich, der die Hälfte des inneren Displays erhält, hat weit weniger Breite als das ganze Display. @sarunw hat eine Übersicht der Size Classes veröffentlicht, die jede View auf dem iPhone Duo erhält; sie ist ein Bild, prüfen Sie daher die Werte pro Bereich im Originalbeitrag, statt sich auf eine Zusammenfassung hier zu verlassen.

Auch das Zusammenfallen spielt eine Rolle. Ein Apple-DTS-Engineer erklärte in Thread 847800, dass ArrangementView darauf zurückfällt, nur eine View anzuzeigen, wenn ihre Aufteilung im aktuellen Seitenverhältnis, in der aktuellen Haltung oder bei einer kompakten Size Class nicht möglich ist. Sie behält die View mit der höheren .layoutPriority oder standardmäßig die primäre View. Wenn Ihr sekundärer Bereich wichtige Steuerelemente enthält, geben Sie Nutzern einen anderen Weg dorthin, wenn die Breite compact ist.

struct EditorView: View {
    var body: some View {
        ArrangementView {
            VideoPreview()
        } secondary: {
            EditingControls()
        }
        .arrangementViewStyle(.split)
    }
}

struct VideoPreview: View {
    @Environment(\.horizontalSizeClass) private var horizontalSizeClass

    var body: some View {
        PreviewCanvas()
            .toolbar {
                if horizontalSizeClass == .compact {
                    // Der Steuerbereich ist evtl. ausgeblendet; über die Toolbar anbieten.
                    ToolbarItem { EditingControlsButton() }
                }
            }
    }
}

Die Aufrufe von ArrangementView und .arrangementViewStyle(.split) sind so dargestellt, wie Apple sie im Tech Talk zeigt. Der Fallback für kompakte Breite folgt dem Ansatz, der im selben Forum-Thread vorgeschlagen wird.

Wie teste ich iPhone Duo Haltungen in Xcode Device Hub?

Sie brauchen keine Hardware, um Size Classes zu prüfen. Apples Tech Talk nennt die Schritte: Wählen Sie in Xcode 27.1 den iPhone Duo Simulator, führen Sie Ihre App in Device Hub aus und nutzen Sie die Steuerknöpfe unten, um das Gerät zu öffnen, zu schließen, zu drehen oder zu falten. Device Hub und das Vollbilderlebnis setzen beide Xcode 27.1 voraus.

Gehen Sie jede Zeile der Tabelle oben durch. Prüfen Sie für jede Haltung, dass:

  1. Das Layout den Size Classes entspricht, nicht der Ausrichtung.
  2. Text und Steuerelemente auf jeder Seite innerhalb der Safe Area bleiben, nicht nur oben und unten.
  3. Nichts Wichtiges über dem Falz liegt, wenn das Gerät halb offen ist.
  4. Der Zustand den Übergang übersteht: Scrollposition, Texteingabe und die aktuelle Auswahl.

Testen Sie anschließend schmalere Breiten auf dem inneren Display. Apple schlägt vor, die App am Home-Indikator auf eine Seite des Bildschirms zu ziehen, um in das Split-View-Multitasking zu wechseln, und dann auf die andere Seite. Der DTS-Engineer im Forum nannte ausdrücklich zwei geöffnete Apps auf dem inneren Display als zu prüfende Konfiguration, da Ihre App dann weniger als die volle reguläre Breite erhält. @sarunw merkt außerdem an, dass Device Hub in Xcode 27.2 Speicherdruck, Zeitlupen-Animationen, ein Schütteln und einen Sturz simulieren kann, was hilft, wenn Sie Bugs jagen, die mitten im Übergang auftreten.

Die halb offene Haltung verdient bei Spielen besondere Aufmerksamkeit. Eine Haltung mit regulärer Breite kann physisch trotzdem zweigeteilt sein, und genau das nutzen Spiele wie Greens Mini Golf, mit dem Putting Green auf der unteren Hälfte und einer Caddie-Kamera auf der aufgestellten Hälfte. Size Classes verraten Ihnen nicht, wo der Falz ist; das ist die Aufgabe von Reserved Regions und den Hinge-APIs.

Die wichtigsten Punkte

  • Geschlossen meldet das iPhone Duo iPhone-Size-Classes: kompakte Breite mit regulärer Höhe im Hochformat, kompakt in beide Richtungen im Querformat.
  • Halb offen oder aufgeklappt meldet das innere Display reguläre Breite und reguläre Höhe in beiden Ausrichtungen, wie ein iPad.
  • Verzweigen Sie nicht nach Ausrichtung oder Gerätemodell. Das innere Display ignoriert unterstützte Ausrichtungen, und Apple empfiehlt, sich nach dem verfügbaren Platz zu richten.
  • Lesen Sie horizontalSizeClass und verticalSizeClass aus dem SwiftUI-Environment oder aus traitCollection in UIKit aus und bevorzugen Sie System-Container, die sich bereits anpassen.
  • Lesen Sie in einer ArrangementView die Size Classes pro Bereich aus und planen Sie ein, dass die Aufteilung zu einer einzigen View zusammenfällt.
  • Testen Sie jede Haltung und Split View in Device Hub mit Xcode 27.1.

Size Classes sind der erste Schritt. Sehen Sie als Nächstes in unserem Leitfaden zur vertikalen Toolbar auf dem iPhone Duo, wie Bars an den Bildschirmrand wandern, arbeiten Sie die vollständige Checkliste zur iPhone Duo Vorbereitung durch oder stöbern Sie in Spielen, die das Scharnier bereits nutzen, unter Built for the fold.

Häufige Fragen

Welche Size Class verwendet das innere Display des iPhone Duo?

Das innere Display meldet eine reguläre horizontale und eine reguläre vertikale Size Class, im Hoch- wie im Querformat, egal ob das Gerät halb offen oder ganz aufgeklappt ist. Das ist dieselbe Kombination, die eine iPad-App im Vollbild sieht.

Welche Size Class verwendet das äußere Display des iPhone Duo?

Das äußere Display verhält sich wie andere iPhone-Modelle. Im Hochformat meldet es kompakte Breite und reguläre Höhe; im Querformat kompakte Breite und kompakte Höhe.

Sollte ich die Ausrichtung oder das Gerätemodell prüfen, um meine App an das iPhone Duo anzupassen?

Nein. Apple empfiehlt, gerätespezifische Logik und Ausrichtungsprüfungen zu vermeiden und sich stattdessen nach Size Classes und verfügbarem Platz zu richten. Das innere Display berücksichtigt die unterstützten Interface-Ausrichtungen Ihrer App nicht, daher ist die Ausrichtung dort kein verlässliches Layout-Signal.

Gibt es einen UITraitCollection-Trait für den Falz oder die Haltung des iPhone Duo?

Ein Apple-Engineer sagte in den Developer Forums, dass es keine Trait-Collection-Traits für die Haltung gibt. Verwenden Sie Size Classes für das Layout, Reserved Regions für den Falz und die Hinge-APIs, wenn Sie den Faltzustand selbst brauchen.

Wie teste ich die Size Classes des iPhone Duo ohne das Gerät?

Führen Sie Ihre App im iPhone Duo Simulator in Device Hub aus, was Xcode 27.1 voraussetzt. Mit den Steuerelementen öffnen, schließen, drehen und falten Sie das Gerät, und Sie können die App auf dem inneren Display in Split View ziehen, um schmalere Breiten zu testen.

Quellen

  1. Size classes on iPhone Duo: folded portrait, folded landscape, half-open and open · @sarunw on X
  2. Folded, iPhone Duo is an iPhone. Unfolded, it's an iPad. · @sarunw on X
  3. Start with size classes, layout margins and safe area insets · @sarunw on X
  4. Size classes of each view in ArrangementView on iPhone Duo · @sarunw on X
  5. Prepare your app for iPhone Duo · Apple Developer
  6. Strike a pose with adaptive layouts on iPhone Duo · Apple Developer
  7. Does the iPhone Duo inner display use a regular horizontal size class? · Apple Developer Forums
  8. Adapting an existing UIKit app for iPhone Duo at runtime · Apple Developer Forums
  9. Hinge articulation and UITraitCollection in custom view controllers · Apple Developer Forums
  10. How should ArrangementView behave across iPhone Duo display modes? · Apple Developer Forums
  11. iPhone Duo Apps, What Changes in Your Code and What to Do With Old Ones · Pasquale Pillitteri

Machen Sie das Scharnier zum Teil Ihrer App.

Wir stellen Apps und Spiele vor, die mit dem iPhone Duo wirklich etwas anfangen. Schicken Sie uns Ihre mit einem Link zum App Store – oder sehen Sie sich an, was andere gebaut haben.

[email protected]