0Pricing
Swift Academy · Lezione

Misurazione delle subview

Interroghi le dimensioni delle subview durante il layout.

Misurazione delle subview è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

La misurazione determina il layout

Prima di poter posizionare gli elementi figli, dovete misurarli. Il layout di SwiftUI è una negoziazione: il genitore propone le dimensioni, gli elementi figli rispondono e voi conciliate le risposte.

Chiedere la dimensione a una sottovista

Ogni proxy in Subviews restituisce sizeThatFits(_:) per una determinata ProposedViewSize. Il proxy restituisce la dimensione che l'elemento figlio assumerebbe con quella proposta.

let size = subview.sizeThatFits(.unspecified)

Le tre proposte di verifica

Per conoscere la flessibilità di un elemento figlio, verificatelo in tre modi: .zero rivela la dimensione minima, .infinity quella massima e .unspecified quella ideale.

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

Proporre una larghezza specifica

Per il testo che va a capo, proponete una larghezza concreta e lasciate l'altezza a nil. L'elemento figlio restituisce l'altezza necessaria per quella larghezza.

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

Priorità del layout

Ogni sottovista espone una priority (impostata da .layoutPriority). Quando lo spazio è limitato, assegni prima alle viste figlie con priorità più alta la loro dimensione ideale.

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

Lettura dei valori personalizzati

Le sottoviste possono contenere dati tipizzati tramite una LayoutValueKey. Il layout legge subview[MyKey.self] per influenzare il posizionamento, ad esempio la spaziatura per elemento.

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

Impostazione di un valore di layout

Una vista imposta il proprio valore di layout con il modificatore layoutValue(key:value:), consentendo alle viste figlie di comunicare suggerimenti al layout.

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

Spaziatura tra le sottoviste

Le sottoviste espongono preferenze di spacing. Utilizzi subview.spacing.distance(to:along:) per ottenere la distanza consigliata tra due viste figlie adiacenti lungo un asse.

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

Accumulo delle dimensioni

Un layout orizzontale somma le larghezze delle viste figlie e usa l'altezza della più alta. Misurare prima tutte le viste figlie consente di calcolare la dimensione del contenitore prima di posizionarle.

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

Nuova misurazione durante il posizionamento

In placeSubviews deve misurare nuovamente le viste, oppure riutilizzare le dimensioni memorizzate nella cache, in modo che le posizioni corrispondano a quanto dichiarato. Le misurazioni sono chiamate proxy rapide, non vere operazioni di rendering.

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
    }
}

Rispetto della proposta del genitore

Onori sempre la proposta ricevuta. Se il genitore propone una larghezza fissa, disponga le viste figlie al suo interno; non superi silenziosamente i limiti, altrimenti il layout verrà ritagliato.

let containerWidth = proposal.width ?? .infinity

Verifica rapida: misurazione

Verifichi la Sua comprensione della misurazione delle sottoviste.

Riepilogo: misurazione delle sottoviste

La misurazione è il cuore dei layout personalizzati. Esamini le viste figlie con .zero, .infinity e .unspecified per individuare le dimensioni minima, massima e ideale, proponga larghezze concrete per i contenuti che vanno a capo e rispetti la priorità del layout e le preferenze di spaziatura.

I valori LayoutValueKey personalizzati consentono alle viste figlie di trasmettere suggerimenti. Misuri in modo coerente in entrambi i metodi del protocollo, così la dimensione dichiarata e il posizionamento saranno sempre concordi.

Domande Frequenti

La lezione «Misurazione delle subview» è gratuita?

Sì — il testo completo di «Misurazione delle subview» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «Misurazione delle subview»?

Interroghi le dimensioni delle subview durante il layout. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Misurazione delle subview»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi del protocollo Layout
  2. Misurazione delle subview
  3. Creazione di un flow layout
  4. Cache del layout e prestazioni
← Torna a Swift Academy