Form i SwiftUI: vad det är, skapa formulär och konfigurera

Författare: IT Sectr Publicerad: 2026-06-25 Lästid: 8 min

Form i SwiftUI är en containerkomponent för att bygga strukturerade inställnings- och datainmatningsgränssnitt som följer designen av Settings i iOS. Komponenten grupperar automatiskt kontroller i sektioner med systemavstånd och -stilar, vilket befriar utvecklaren från manuell kalibrering av avgränsare och färger. Enligt Apple Developer Documentation (2025) anpassar Form utseendet till varje plattform — från grupperade tabeller på iOS till standardlistor på macOS — samtidigt som API:n förblir densamma.

Viktigaste punkterna

  • Form — container för Settings-liknande gränssnitt i SwiftUI med automatisk gruppering av element
  • Section i Form skapar logiska block med rubriker och sidfötter
  • Picker, Toggle, TextField får automatiskt den stil som matchar plattformen
  • Avstånd och avgränsare hanteras av systemet utan manuell konfigurering
  • NavigationLink gör det möjligt att skapa hierarkiska formulär med övergång till underordnade skärmar

Vad är Form i SwiftUI?

Form är en specialiserad SwiftUI-container avsedd för att skapa datainmatningsformulär och inställningsskärmar. Den ärver List-beteendet men lägger till plattformsstilar: på iOS visas Form som en grupperad tabell med rundade hörn på sektionerna, på macOS som en standardsystemlista med kryssrutor och kontroller.

Till skillnad från manuell layout med VStack och HStack placerar Form automatiskt ut avstånd mellan element, lägger till avgränsare och anpassar utseendet till systemtemat — ljust eller mörkt. Utvecklaren beskriver bara den logiska strukturen: Section för gruppering och kontrollerna inuti. Formuläret bestämmer själv hur Picker, Toggle eller Stepper ska placeras visuellt på en specifik plattform.

Form stödjer alla standardmässiga SwiftUI-inmatningselement: TextField för text, SecureField för lösenord, Picker för val från lista, Toggle för på/av, Slider för intervall, Stepper för stegvisa värden och DatePicker för datum. Varje element får automatiskt en stil som överensstämmer med HIG (Human Interface Guidelines) från Apple på målplattformen.

Form vs List: jämförelse av containrar

Trots den yttre likheten löser Form och List olika uppgifter. List är en universell container för att visa rullbara datalistor med möjlighet till swipe-åtgärder och radredigering. Form är en specialiserad container för datainmatning och inställningar, optimerad för kontrollernas systemstilar.

List passar för att visa dynamiska data: nyhetsflöden, chattar, produktkataloger. Form — för statiska skärmar med en förutsägbar uppsättning fält: användarprofil, appinställningar, registreringsformulär. Den viktigaste skillnaden: Form-elementen kan vara interaktiva kontroller, medan List-raderna oftast visar data och reagerar på tryck med navigering eller en åtgärd.

ParameterFormList
ÄndamålDatainmatning, inställningarVisa listor
Sektioners stilGrouped (iOS), system (macOS)Plain eller Grouped
KontrollerPicker, Toggle, Slider, StepperBegränsade (knapp)
Dynamiska dataBegränsat (ForEach i Section)Fullt stöd
Swipe-åtgärderJa, swipeActionsJa, swipeActions

Enligt Apple Human Interface Guidelines (2025) bör Form användas för inställnings- och inmatningsskärmar där det på en skärm finns 3 till 20 kontroller och där indelning i sektioner förbättrar uppfattningen.

Section-sektioner i Form

Section är Forms huvudsakliga byggsten som gör det möjligt att gruppera logiskt relaterade element. Varje Section kan ha en rubrik, en sidfot och valfritt antal kontroller inuti. Systemet lägger automatiskt till avstånd mellan sektionerna och omsluter varje sektion i ett visuellt block med rundade hörn.

Att använda Section är avgörande för formulärets läsbarhet: element som grupperas efter betydelse uppfattas lättare av användaren. På profilinställningsskärmen kan man till exempel dela upp i separata sektioner "Personuppgifter", "Aviseringar" och "Säkerhet". Varje sektion kan innehålla en sidfot med förklarande text som systemet visar med mindre typsnitt under elementgruppen.

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

    Section(header: Text("Aviseringar"),
            footer: Text("Inaktivera under möten")) {
        Toggle("Push notifications", isOn: $pushEnabled)
        Toggle("Email notifications", isOn: $emailEnabled)
    }
}

I exemplet innehåller den första sektionen "Profile" två textfält utan sidfot, den andra sektionen "Notifications" två reglage med en förklaring under gruppen. Sidfoten lägger automatiskt till ett avstånd och använder caption-teckensnittsstilen. Section kan innehålla en sidfot utan rubrik eller en rubrik utan sidfot.

Kontroller i Form

Form stödjer alla standardmässiga SwiftUI-inmatningselement. Picker i Form visas automatiskt som en navigeringsrad med övergång till en separat valskärm på iOS. Toggle visas som en rad med ett reglage som är justerat mot högerkanten. TextField får systemets inmatningsstil med en placeholder.

För numeriska värden används Stepper (stegvis ändring) och Slider (jämn ändring inom ett intervall). DatePicker stödjer flera lägen: date, time, dateAndTime. För färgval finns ColorPicker. Varje element anpassas till plattformen utan extra kod — på iOS använder kontrollerna UIKit:s inbyggda stilar, på macOS AppKit.

ElementÄndamålStil i Form
TextFieldTextinmatningRad med placeholder
SecureFieldLösenordsinmatningRad med dolda tecken
PickerVal från listaNavigationLink till valskärmen
TogglePå/AvRad med reglage
SliderVärdeintervallHorisontell reglage
DatePickerVälj datum/tidKompakt eller hjulstil

För anpassade kontroller i Form kan valfria SwiftUI Views användas — de ärver sektionens standardbeteende. Men det rekommenderas att hålla sig till systemelementen, eftersom de garanterar överensstämmelse med HIG och stödjer Accessibility (VoiceOver, Dynamic Type) utan ytterligare konfigurering.

Kodexempel för Form

Vi tittar på att skapa en registreringsskärm med Form. Formuläret innehåller fyra sektioner: personuppgifter, rollval, prenumerationsinställningar och en skickaknapp. Section används för gruppering och standardkontroller i 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("Personuppgifter")) {
                    TextField("Name", text: $name)
                    TextField("Email", text: $email)
                        .keyboardType(.emailAddress)
                }

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

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

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

    private func submitForm() { }
}

Formuläret är uppdelat i fyra Section: personuppgifter med två textfält, rollval via Picker, samtycke till villkoren via Toggle och registreringsknappen. Knappen är inaktiverad tills användaren samtycker till villkoren — detta är ett exempel på validering i Form. NavigationStack lägger till en rubrik och gör att Picker kan öppna en separat valskärm på iOS.

Inställningsformulär med undersektioner

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("Utseende")) {
                    Toggle("Dark mode", isOn: $isDarkMode)
                    Slider(value: $volume, in: 0...1) {
                        Text("Volym")
                    }
                }

                Section(header: Text("Påminnelser"),
                        footer: Text("Du får en avisering vid vald tid")) {
                    DatePicker("Remind at",
                        selection: $reminderDate,
                        displayedComponents: .hourAndMinute)
                }

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

Detta exempel visar kombinationen Slider, DatePicker och NavigationLink i Form. DatePicker använder läget hourAndMinute för att endast visa tiden. NavigationLink i den sista sektionen skapar en övergång till skärmen för avancerade inställningar — ett vanligt mönster för Settings-liknande gränssnitt. Sektionernas rubriker och sidfötter gör formuläret självdokumenterande: användaren förstår direkt vilken grupp varje kontroll tillhör.

Vanliga frågor

Vad är skillnaden mellan Form och List i SwiftUI?

Form är optimerad för datainmatning och inställningar: kontrollerna får systemstilar, sektionerna rundade hörn och avstånd. List är en universell container för att visa data. Form passar för inställningsskärmar, List för chattar, flöden och kataloger.

Kan jag använda Picker i Form?

Ja, Picker i Form visas automatiskt som en rad med det valda värdet och en NavigationLink för val från lista på iOS. På macOS visas Picker som en rullgardinslista eller radiogrupp beroende på stilen. Anpassningen sker utan extra kod.

Hur lägger jag till en anpassad View i Form?

Alla SwiftUI Views kan placeras i Form eller Section. För anpassade kontroller rekommenderas att ärva sektionens standardavstånd och stödja Dynamic Type via systemtypsnitt. Undvik fasta storlekar och färger så att formuläret visas korrekt på alla enheter.

Stödjer Form rullning?

Ja, Form omsluts automatiskt i en ScrollView om innehållet överskrider skärmhöjden. Det behövs ingen manuell ScrollView — systemet avgör själv om rullning behövs. För formulär som inte ska rullas, använd VStack med fast höjd.

Hur ändrar jag stilen på Form på iOS?

Form på iOS stödjer två stilar via modifieraren .formStyle(.grouped) — standardvyn grouped med rundade sektioner. För macOS finns .formStyle(.columns) med flerkolumnslayout. Stilen tillämpas på hela Form på en gång och ändrar den visuella representationen av alla element inuti.

Slutsatser

  • Form — SwiftUI-container för Settings-liknande gränssnitt med automatisk gruppering via Section
  • Section säkerställer en logisk indelning av element med rubriker och sidfötter
  • Picker, Toggle, TextField anpassar sig automatiskt till plattformens stil utan manuell konfigurering
  • Avstånd och avgränsare hanteras av systemet i enlighet med Apple HIG på varje plattform
  • NavigationLink i Form skapar hierarkisk navigering — standard för inställningsskärmar
  • Form stödjer alla SwiftUI-inmatningselement: Slider, Stepper, DatePicker, ColorPicker
  • Använd Form för inställnings- och inmatningsskärmar och List för att visa dynamiska datalistor

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också