Form in SwiftUI: cos'è, creazione e configurazione di moduli

Autore: IT Sectr Pubblicato: 2026-06-25 Tempo di lettura: 8 min

Form in SwiftUI è un componente contenitore per costruire interfacce strutturate di impostazioni e immissione dati, seguendo il design di Impostazioni in iOS. Il componente raggruppa automaticamente i controlli in sezioni con spaziatura e stili di sistema, liberando lo sviluppatore dalla regolazione manuale di separatori e colori. Secondo la Documentazione Apple Developer (2025), Form adatta il suo aspetto a ogni piattaforma — dalle tabelle raggruppate su iOS agli elenchi standard su macOS — mantenendo un'API unificata.

Punti chiave

  • Form — un contenitore per interfacce stile Impostazioni in SwiftUI con raggruppamento automatico degli elementi
  • Section all'interno di Form crea blocchi logici con intestazioni e piè di pagina
  • Picker, Toggle, TextField ottengono automaticamente uno stile corrispondente alla piattaforma
  • La spaziatura e i separatori sono gestiti dal sistema, senza necessità di configurazione manuale
  • NavigationLink consente di creare moduli gerarchici con navigazione verso schermate figlie

Cos'è Form in SwiftUI?

Form è un contenitore specializzato di SwiftUI progettato per creare moduli di input e schermate di impostazioni. Eredita il comportamento di List ma aggiunge stili specifici della piattaforma: su iOS, Form viene visualizzato come una tabella raggruppata con angoli arrotondati delle sezioni; su macOS, appare come un elenco di sistema standard con caselle di controllo e controlli.

A differenza del layout manuale con VStack e HStack, Form organizza automaticamente la spaziatura tra gli elementi, aggiunge separatori e adatta il suo aspetto al tema di sistema — chiaro o scuro. Lo sviluppatore descrive solo la struttura logica: Section per il raggruppamento e i controlli all'interno. Il modulo stesso decide come disporre visivamente Picker, Toggle o Stepper su una piattaforma specifica.

Form supporta tutti gli elementi di input standard di SwiftUI: TextField per il testo, SecureField per le password, Picker per la selezione da elenco, Toggle per attivare/disattivare, Slider per intervalli, Stepper per valori incrementali e DatePicker per le date. Ogni elemento ottiene automaticamente uno stile conforme alle HIG (Human Interface Guidelines) di Apple sulla piattaforma di destinazione.

Form vs List: confronto contenitori

Nonostante la loro somiglianza visiva, Form e List risolvono compiti diversi. List è un contenitore universale per visualizzare elenchi di dati scorrevoli con azioni di scorrimento e modifica delle righe. Form è un contenitore specializzato per l'immissione di dati e le impostazioni, ottimizzato per gli stili di controllo del sistema.

List è adatto per visualizzare dati dinamici: feed di notizie, chat, cataloghi di prodotti. Form è per schermate statiche con un insieme prevedibile di campi: profilo utente, impostazioni dell'app, modulo di registrazione. La differenza chiave: gli elementi di Form possono essere controlli interattivi, mentre le righe di List generalmente visualizzano dati e rispondono al tocco con navigazione o azione.

ParametroFormList
ScopoImmissione dati, impostazioniVisualizzazione elenchi
Stile sezioniGrouped (iOS), sistema (macOS)Plain o Grouped
ControlliPicker, Toggle, Slider, StepperLimitati (pulsante)
Dati dinamiciLimitato (ForEach all'interno di Section)Supporto completo
Azioni di scorrimentoSì, swipeActionsSì, swipeActions

Secondo le Apple Human Interface Guidelines (2025), Form dovrebbe essere utilizzato per schermate di impostazioni e input dove ci sono da 3 a 20 controlli su una schermata e dividerli in sezioni migliora l'usabilità.

Sezioni Section all'interno di Form

Section è il blocco di costruzione principale di Form, che consente di raggruppare elementi logicamente correlati. Ogni Section può avere un'intestazione, un piè di pagina e un numero qualsiasi di controlli all'interno. Il sistema aggiunge automaticamente spaziatura tra le sezioni e avvolge ciascuna in un blocco visivo con angoli arrotondati.

Usare Section è fondamentale per la leggibilità del modulo: gli elementi raggruppati per significato sono più facili da elaborare per l'utente. Ad esempio, su una schermata di impostazioni del profilo, si possono separare «Dati personali», «Notifiche» e «Sicurezza» in sezioni individuali. Ogni sezione può contenere un piè di pagina con testo esplicativo che il sistema visualizza in un carattere più piccolo sotto il gruppo di elementi.

swift
Form {
    Section(header: Text("Profilo")) {
        TextField("Nome", text: $name)
        TextField("Email", text: $email)
    }

    Section(header: Text("Notifiche"),
            footer: Text("Disattiva durante le riunioni")) {
        Toggle("Push notifications", isOn: $pushEnabled)
        Toggle("Email notifications", isOn: $emailEnabled)
    }
}

Nell'esempio, la prima sezione «Profile» contiene due campi di testo senza piè di pagina, la seconda sezione «Notifications» contiene due interruttori con una spiegazione sotto il gruppo. Il piè di pagina aggiunge automaticamente spaziatura e utilizza lo stile di carattere caption. Una Section può avere un piè di pagina senza intestazione o un'intestazione senza piè di pagina.

Controlli in Form

Form supporta tutti gli elementi di input standard di SwiftUI. Picker in Form viene visualizzato automaticamente come una riga di navigazione con transizione a una schermata di selezione separata su iOS. Toggle appare come una riga con un interruttore allineato a destra. TextField ottiene lo stile di input di sistema con un segnaposto.

Per i valori numerici, si utilizzano Stepper (modifica incrementale) e Slider (modifica graduale in un intervallo). DatePicker supporta diverse modalità: date, time, dateAndTime. ColorPicker è disponibile per la selezione del colore. Ogni elemento si adatta alla piattaforma senza codice aggiuntivo — su iOS, i controlli utilizzano stili nativi UIKit; su macOS, AppKit.

ElementoScopoStile in Form
TextFieldInput di testoRiga con segnaposto
SecureFieldInput passwordRiga con caratteri nascosti
PickerSelezione da elencoNavigationLink alla schermata di selezione
ToggleAttiva/DisattivaRiga con interruttore
SliderIntervallo di valoriCursore orizzontale
DatePickerSelezione data/oraStile compatto o a ruota

Per controlli personalizzati all'interno di Form, è possibile utilizzare qualsiasi SwiftUI View — ereditano il comportamento standard della sezione. Tuttavia, si raccomanda di attenersi agli elementi di sistema, poiché garantiscono la conformità alle HIG e supportano l'accessibilità (VoiceOver, Dynamic Type) senza configurazione aggiuntiva.

Esempi di codice Form

Creiamo una schermata di registrazione utilizzando Form. Il modulo contiene quattro sezioni: dati personali, selezione del ruolo, impostazioni di abbonamento e un pulsante di invio. Si utilizza Section per il raggruppamento e i controlli standard di SwiftUI.

swift
struct RegistrationForm: View {
    @State private var name = ""
    @State private var email = ""
    @State private var role = "Developer"
    @State private var agreedToTerms = false

    let roles = ["Developer", "Designer", "Manager"]

    var body: some View {
        NavigationStack {
            Form {
                Section(header: Text("Informazioni personali")) {
                    TextField("Name", text: $name)
                    TextField("Email", text: $email)
                        .keyboardType(.emailAddress)
                }

                Section(header: Text("Ruolo")) {
                    Picker("Select role", selection: $role) {
                        ForEach(roles, id: \.self) { role in
                            Text(role).tag(role)
                        }
                    }
                }

                Section {
                    Toggle("Agree to terms", isOn: $agreedToTerms)
                }

                Section {
                    Button("Registrati") {
                        submitForm()
                    }
                    .disabled(!agreedToTerms)
                }
            }
            .navigationTitle("Registration")
        }
    }

    private func submitForm() { }
}

Il modulo è diviso in quattro Section: dati personali con due campi di testo, selezione del ruolo tramite Picker, accettazione dei termini tramite Toggle e un pulsante di registrazione. Il pulsante è disabilitato finché l'utente non accetta i termini — questo è un esempio di validazione all'interno di Form. NavigationStack aggiunge un titolo e consente a Picker di aprire una schermata di selezione separata su iOS.

Modulo di impostazioni con sottosezioni

swift
struct SettingsForm: View {
    @State private var volume: Double = 0.5
    @State private var isDarkMode = false
    @State private var reminderDate = Date()

    var body: some View {
        NavigationStack {
            Form {
                Section(header: Text("Aspetto")) {
                    Toggle("Dark mode", isOn: $isDarkMode)
                    Slider(value: $volume, in: 0...1) {
                        Text("Volume")
                    }
                }

                Section(header: Text("Promemoria"),
                        footer: Text("Riceverai una notifica all'orario selezionato")) {
                    DatePicker("Remind at",
                        selection: $reminderDate,
                        displayedComponents: .hourAndMinute)
                }

                Section {
                    NavigationLink("Advanced Settings",
                        destination: AdvancedSettingsView())
                }
            }
            .navigationTitle("Settings")
        }
    }
}

Questo esempio dimostra una combinazione di Slider, DatePicker e NavigationLink all'interno di Form. DatePicker utilizza la modalità hourAndMinute per visualizzare solo l'ora. NavigationLink nell'ultima sezione crea una transizione verso una schermata di impostazioni avanzate — un modello comune per interfacce stile Impostazioni. Le intestazioni e i piè di pagina delle sezioni rendono il modulo auto-documentante: l'utente capisce immediatamente a quale gruppo appartiene ogni controllo.

Domande frequenti

Qual è la differenza tra Form e List in SwiftUI?

Form è ottimizzato per l'immissione di dati e le impostazioni: i controlli ottengono stili di sistema, le sezioni ottengono angoli arrotondati e spaziatura. List è un contenitore universale per la visualizzazione di dati. Form è adatto per schermate di impostazioni, List è per chat, feed, cataloghi.

Si può usare Picker all'interno di Form?

Sì, Picker all'interno di Form viene visualizzato automaticamente come una riga con il valore selezionato e un NavigationLink per la selezione dall'elenco su iOS. Su macOS, Picker appare come un elenco a discesa o gruppo di opzioni a seconda dello stile. L'adattamento avviene senza codice aggiuntivo.

Come aggiungere una View personalizzata a Form?

Qualsiasi SwiftUI View può essere inserita all'interno di Form o Section. Per i controlli personalizzati, si raccomanda di ereditare la spaziatura standard della sezione e supportare Dynamic Type attraverso i caratteri di sistema. Evitate dimensioni e colori fissi affinché il modulo venga visualizzato correttamente su tutti i dispositivi.

Form supporta lo scorrimento?

Sì, Form viene automaticamente avvolto in un ScrollView se il contenuto supera l'altezza dello schermo. Non è necessario aggiungere ScrollView manualmente — il sistema determina autonomamente se lo scorrimento è necessario. Per i moduli che non devono scorrere, utilizzate VStack con un'altezza fissa.

Come cambiare lo stile di Form su iOS?

Form su iOS supporta due stili tramite il modificatore .formStyle(.grouped) — la vista raggruppata standard con sezioni arrotondate. Su macOS è disponibile .formStyle(.columns) con disposizione a più colonne. Lo stile si applica all'intero Form in una volta e modifica la rappresentazione visiva di tutti gli elementi interni.

Riepilogo

  • Form — contenitore SwiftUI per interfacce stile Impostazioni con raggruppamento automatico tramite Section
  • Section fornisce separazione logica degli elementi con intestazioni e piè di pagina
  • Picker, Toggle, TextField si adattano automaticamente allo stile della piattaforma senza configurazione manuale
  • La spaziatura e i separatori sono gestiti dal sistema, conformi alle HIG Apple su ogni piattaforma
  • NavigationLink all'interno di Form crea navigazione gerarchica — standard per schermate di impostazioni
  • Form supporta tutti gli elementi di input SwiftUI: Slider, Stepper, DatePicker, ColorPicker
  • Utilizzate Form per schermate di impostazioni e input, List per visualizzare elenchi di dati dinamici

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche