0Pricing
Swift Academy · Lektion

Subviews messen

Ermitteln Sie die Größen von Subviews während des Layouts.

Subviews messen ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Messung bestimmt das Layout

Bevor Sie untergeordnete Elemente platzieren können, müssen Sie sie messen. Das SwiftUI-Layout ist ein Aushandlungsprozess: Der übergeordnete View schlägt Größen vor, die untergeordneten Elemente antworten, und Sie führen die Ergebnisse zusammen.

Die Größe eines Subviews abfragen

Jeder Proxy in Subviews beantwortet sizeThatFits(_:) für einen bestimmten ProposedViewSize. Der Proxy gibt die Größe zurück, die das untergeordnete Element bei diesem Vorschlag einnehmen würde.

let size = subview.sizeThatFits(.unspecified)

Die drei Prüfgrößen

Um die Anpassungsfähigkeit eines untergeordneten Elements zu ermitteln, prüfen Sie es auf drei Arten: .zero zeigt seine minimale Größe, .infinity seine maximale und .unspecified seine optimale Größe.

let minSize = subview.sizeThatFits(.zero)
let maxSize = subview.sizeThatFits(.infinity)
let ideal = subview.sizeThatFits(.unspecified)

Eine bestimmte Breite vorschlagen

Schlagen Sie bei umbrechendem Text eine konkrete Breite vor und lassen Sie die Höhe auf nil. Das untergeordnete Element meldet die Höhe, die es bei dieser Breite benötigt.

let proposal = ProposedViewSize(width: 200, height: nil)
let fit = subview.sizeThatFits(proposal)

Layout-Priorität

Jede Unteransicht stellt eine priority bereit, die über .layoutPriority festgelegt wird. Wenn der Platz knapp ist, geben Sie den Unteransichten mit höherer Priorität zuerst ihre ideale Größe.

for subview in subviews {
    let p = subview.priority
    // distribute space to higher priority first
}

Benutzerdefinierte Werte auslesen

Unteransichten können über einen LayoutValueKey typisierte Daten übertragen. Das Layout liest subview[MyKey.self], um die Platzierung zu beeinflussen – beispielsweise einen individuellen Abstand pro Element.

private struct RankKey: LayoutValueKey {
    static let defaultValue: Int = 0
}
let rank = subviews[0][RankKey.self]

Einen Layoutwert festlegen

Eine Ansicht legt ihren Layoutwert mit dem Modifikator layoutValue(key:value:) fest. So können untergeordnete Ansichten Hinweise an Ihr Layout übermitteln.

Text("Featured").layoutValue(key: RankKey.self, value: 10)

Abstände zwischen Unteransichten

Unteransichten stellen spacing-Präferenzen bereit. Verwenden Sie subview.spacing.distance(to:along:), um den empfohlenen Abstand zwischen zwei benachbarten untergeordneten Ansichten entlang einer Achse zu ermitteln.

let gap = subviews[0].spacing.distance(
    to: subviews[1].spacing, along: .horizontal)

Größen aufsummieren

Ein horizontales Layout summiert die Breiten der untergeordneten Ansichten und übernimmt die größte Höhe. Wenn Sie zuerst alle Unteransichten messen, können Sie die Größe des Containers berechnen, bevor Sie etwas platzieren.

let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
let totalWidth = sizes.reduce(0) { $0 + $1.width }
let maxHeight = sizes.map(\.height).max() ?? 0

Während der Platzierung erneut messen

In placeSubviews müssen Sie erneut messen oder zwischengespeicherte Größen verwenden, damit die Positionen mit der gemeldeten Größe übereinstimmen. Messungen sind kostengünstige Proxy-Aufrufe und keine echten Render-Vorgänge.

func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
    for s in subviews {
        let size = s.sizeThatFits(.unspecified)
        // use size to position s
        _ = size
    }
}

Den Vorschlag des übergeordneten Elements berücksichtigen

Berücksichtigen Sie immer den erhaltenen Vorschlag. Wenn das übergeordnete Element eine feste Breite vorschlägt, ordnen Sie die untergeordneten Ansichten innerhalb dieser Breite an. Lassen Sie sie nicht unbemerkt überlaufen, da das Layout sonst Inhalte abschneidet.

let containerWidth = proposal.width ?? .infinity

Kurzer Test: Messen

Testen Sie Ihr Verständnis der Messung von Unteransichten.

Zusammenfassung: Unteransichten messen

Die Messung ist das Herzstück eines benutzerdefinierten Layouts. Prüfen Sie untergeordnete Ansichten mit .zero, .infinity und .unspecified, um minimale, maximale und ideale Größen zu ermitteln. Schlagen Sie für Inhalte mit Zeilenumbruch konkrete Breiten vor und berücksichtigen Sie Layout-Priorität und Abstandspräferenzen.

Benutzerdefinierte Werte vom Typ LayoutValueKey ermöglichen es untergeordneten Ansichten, Hinweise zu übermitteln. Messen Sie in beiden Protokollmethoden konsistent, damit gemeldete Größe und Platzierung immer übereinstimmen.

Häufig gestellte Fragen

Ist die Lektion „Subviews messen“ kostenlos?

Ja — der vollständige Text von „Subviews messen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Subviews messen“?

Ermitteln Sie die Größen von Subviews während des Layouts. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Subviews messen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen des Layout-Protocols
  2. Subviews messen
  3. Ein Flow-Layout erstellen
  4. Layout-Cache und Performance
← Zurück zu Swift Academy