Section in SwiftUI: wat is het, secties maken en groeperen

Auteur: IT Sectr Gepubliceerd: 2026-06-25 Leestijd: 7 min

Section in SwiftUI is een containercomponent voor het logisch groeperen van elementen in Form of List. Het component toont inhoud als een visueel blok met systeemafstanden, afgeronde hoeken en optionele kop- en voettekst. Volgens Apple Developer Documentation (2025) beheert Section geen gegevens, maar organiseert het alleen de presentatie: alle onderliggende elementen erven de stijl en afstanden, waardoor een gestructureerde weergave van formulieren en lijsten wordt gegarandeerd.

Belangrijkste punten

  • Section — container voor het logisch groeperen van elementen in Form en List
  • Koptekst van Section wordt boven de groep elementen weergegeven met systeemlettertype
  • Voettekst voegt verklarende tekst onder de groep toe met kleiner lettertype
  • ForEach in Section maakt het mogelijk dynamische groepen te maken
  • Geneste secties worden ondersteund voor hiërarchische organisatie van inhoud

Wat is Section in SwiftUI?

Section is een structurele SwiftUI-component voor het groeperen van elementen in Form- en List-containers. In tegenstelling tot VStack of HStack voegt Section systeemafstanden, een kop- en voettekst en visuele markering van de groep als een blok met afgeronde hoeken op iOS toe.

Section verandert het gedrag van onderliggende elementen niet — het organiseert alleen hun presentatie. Alle bedieningselementen in Section — Picker, Toggle, TextField — werken normaal, maar zijn visueel verenigd in een logische groep. Dit is vooral belangrijk voor formulierschermen waar de gebruiker snel de structuur van ingevoerde gegevens moet kunnen overzien.

Het systeem beheert automatisch de afstanden tussen secties: de afstand tussen Section op iOS is 16–20 punten, tussen elementen in Section — 0 (scheidingsteken tussen rijen). De ontwikkelaar kan deze afstanden niet wijzigen via padding-modifiers — ze worden door het systeem beheerd om een uniform uiterlijk te garanderen.

Section accepteert twee optionele parameters: header — de koptekst van de groep, en footer — verklarende tekst onder de groep. De koptekst wordt boven de sectie-elementen weergegeven in vet caption-stijl lettertype, de voettekst — in kleiner lettertype in grijs. Beide parameters accepteren elke SwiftUI View, niet alleen Text.

De koptekst van Section helpt de gebruiker te begrijpen tot welke categorie de elementen in de groep behoren. Bijvoorbeeld, op het instellingenscherm oriënteren de kopteksten „Meldingen“, „Privacy“ en „Account“ de gebruiker onmiddellijk. Voettekst is geschikt voor uitleg: „Schakel meldingen uit tijdens de vergadering“ of „Wachtwoord moet minimaal 8 tekens bevatten“. De voettekst wordt indien nodig automatisch over meerdere regels verdeeld.

swift
Section(
    header: Text("Accountbeveiliging"),
    footer: Text("Gebruik een sterk wachtwoord van minimaal 8 tekens.")
) {
    SecureField("Current password", text: $currentPassword)
    SecureField("New password", text: $newPassword)
}

In het voorbeeld heeft Section de koptekst „Accountbeveiliging“ en een voettekst met wachtwoordbeveiligingsadvies. De gebruiker ziet de koptekst als sectielabel, vult twee velden in en leest onmiddellijk de waarschuwing eronder. Een dergelijke structuur verbetert de UX omdat alle informatie over de sectie op één scherm staat zonder dat aparte hulp nodig is.

Section in Form en List

Section werkt zowel in Form als in List, maar de visuele weergave verschilt. In Form wordt Section weergegeven als een blok met afgeronde hoeken en systeemachtergrond, gescheiden van aangrenzende secties door afstanden. In List kan Section de stijl plain — zonder achtergrond en afronding, of inset-grouped — met afgeronde blokken, vergelijkbaar met Form, gebruiken.

De keuze van de container beïnvloedt de stijl van Section. Het plaatsen van Section met dezelfde inhoud in Form en List met de stijl .insetGrouped geeft hetzelfde resultaat. Echter, Form voegt systeemafstanden toe en gebruikt standaard de grouped-stijl, terwijl List expliciete specificatie van de stijl vereist via de modifier .listStyle(.insetGrouped).

ContainerSection standaardBeschikbare stijlen
FormInsetGrouped met afgeronde hoeken.grouped (alleen Form)
ListPlain — zonder sectieachtergrond.plain, .inset, .insetGrouped, .sidebar

Gebruik .listStyle(.insetGrouped) om hetzelfde uiterlijk in List te krijgen. Deze stijl bootst het uiterlijk van Form na en is geschikt voor instellingenschermen die op List zijn gebouwd. Gebruik voor standaard gegevenslijsten .plain — zonder sectiemarkering, met dunne scheidingstekens tussen rijen.

Dynamische inhoud via ForEach

Section kan een dynamisch aantal elementen bevatten via ForEach. Dit maakt het mogelijk groepen te maken met herhalende elementen, terwijl de kop- en voettekst voor de hele groep behouden blijft. ForEach in Section itereert door de gegevensverzameling en maakt onderliggende Views voor elk element, zonder de sectiestructuur te verstoren.

Dynamische secties zijn nuttig voor instellingenschermen met een variabel aantal opties: lijst van beschikbare talen om te selecteren, lijst van aangesloten apparaten of lijst van push-abonnementen. De sectiekop blijft statisch, terwijl de inhoud verandert afhankelijk van de gegevens.

swift
struct DynamicSectionView: View {
    let categories = ["Work", "Personal", "Finance", "Health"]
    @State private var selected = Set<String>()

    var body: some View {
        Form {
            Section(header: Text("Categorieën"),
                    footer: Text("Selecteer uw voorkeurscategorieën")) {
                ForEach(categories, id: \.self) { category in
                    Toggle(category, isOn: Binding(
                        get: { selected.contains(category) },
                        set: { if $0 { selected.insert(category) }
                                     else { selected.remove(category) } }
                    ))
                }
            }

            Section {
                Text("Geselecteerd: \(selected.count) categorieën")
                    .foregroundStyle(.secondary)
            }
        }
    }
}

In dit voorbeeld genereert ForEach een Toggle voor elke categorie uit de array categories. De kop- en voettekst van de sectie worden eenmaal ingesteld en gelden voor de hele groep. De tweede sectie toont het aantal geselecteerde categorieën — is niet afhankelijk van ForEach en blijft statisch. Deze aanpak maakt flexibele formulieren mogelijk waarbij de kop- en voettekst de groep dynamische elementen contextualiseren.

Code voorbeelden van Section

Laten we een volledig voorbeeld van een profielscherm bekijken met Section voor het groeperen van gegevens. Het formulier bevat drie secties: gebruikersinformatie, privacy-instellingen en statistieken. Elke sectie gebruikt zijn eigen koptekst, en de laatste — een voettekst met samenvattende informatie.

swift
struct ProfileView: View {
    @State private var displayName = "Alex Johnson"
    @State private var bio = "iOS developer"
    @State private var isProfilePublic = true
    @State private var showEmail = false

    var body: some View {
        Form {
            Section(header: Text("Profielinfo")) {
                TextField("Display name", text: $displayName)
                TextField("Bio", text: $bio, axis: .vertical)
                    .lineLimit(3)
            }

            Section(header: Text("Privacy")) {
                Toggle("Public profile", isOn: $isProfilePublic)
                Toggle("Show email", isOn: $showEmail)
                    .disabled(!isProfilePublic)
            }

            Section(header: Text("Statistieken"),
                    footer: Text("Laatst bijgewerkt vandaag om 14:30")) {
                LabeledContent("Posts", value: "42")
                LabeledContent("Followers", value: "1,280")
                LabeledContent("Following", value: "346")
            }
        }
        .navigationTitle("Profile")
    }
}

Drie Section scheiden duidelijk de functionele blokken: bewerkbare profielvelden, privacy-schakelaars en statistieken. De tweede sectie demonstreert validatie: de Toggle „Toon e-mail“ is uitgeschakeld totdat het profiel openbaar is. De voettekst van de derde sectie toont de tijd van de laatste update — een voorbeeld van het gebruik van een voettekst voor aanvullende contextuele informatie. LabeledContent is een standaard SwiftUI-component voor het weergeven van een „sleutel-waarde“-paar in Form.

Section met aangepaste koptekst

swift
Section(
    header: HStack {
        Image(systemName: "bell.fill")
            .foregroundStyle(.blue)
        Text("Meldingen")
            .font(.headline)
    },
    footer: Text("Beheer push- en e-mailmeldingen")
) {
    Toggle("Push notifications", isOn: $push)
    Toggle("Email notifications", isOn: $email)
    Stepper("Quiet hours: \(quietStart) — \(quietEnd)",
            value: $quietStart,
            in: 0...23)
}

Dit voorbeeld laat zien dat header elke SwiftUI View kan zijn. Het gebruik van HStack met Image en Text maakt het mogelijk een pictogram naast de koptekst toe te voegen, waardoor de sectie visueel expressiever wordt. Aangepaste kopteksten zijn nuttig voor het markeren van belangrijke secties in de interface: meldingsinstellingen, betaalde functies of secties met waarschuwingen. Overdrijf echter niet met aangepaste kopteksten — 1–2 secties met een niet-standaard uiterlijk per scherm zijn voldoende om de uniformiteit van de interface te behouden.

Veelgestelde vragen

Kunnen Section in elkaar worden genest?

Nee, Section ondersteunt geen nesting in SwiftUI. Het plaatsen van een Section in een andere Section veroorzaakt een compilatiefout. Gebruik voor hiërarchisch groeperen List met OutlineGroup of DisclosureGroup in Section.

Hoe wijzig ik de afstanden tussen Section?

De afstanden tussen Section worden beheerd door het systeem en kunnen niet worden gewijzigd via padding-modifiers. Op iOS is de afstand tussen secties 16–20 punten en voldoet aan HIG. De enige manier om de afstanden te beïnvloeden is het gebruik van een aangepaste ListStyle, maar dit wordt niet aanbevolen.

Wat is het verschil tussen Section en Group in SwiftUI?

Group is een onzichtbare container voor het groeperen van elementen zonder visuele opmaak. Section voegt koptekst, voettekst, afstanden en een visueel blok toe. Group wordt gebruikt voor conditioneel renderen, Section — voor het structureren van de interface.

Ondersteunt Section Accessibility?

Ja, Section voegt automatisch toegankelijkheidslabels toe. De sectiekop wordt het toegankelijkheidslabel van de groep, de voettekst wordt de toegankelijkheidstip. VoiceOver leest de koptekst voor het betreden van de sectie, wat de navigatie voor gebruikers met beperkingen verbetert.

Kan Section zonder Form of List worden gebruikt?

Nee, Section werkt alleen in Form of List. Het gebruik van Section buiten deze containers veroorzaakt een compilatiefout. Gebruik voor het groeperen van elementen in VStack of ScrollView Group of aangepaste Views met handmatige instelling van afstanden.

Samenvatting

  • Section — container voor het groeperen van elementen in Form en List met systeemafstanden
  • Header en footer — optionele parameters voor contextuele informatie over de groep
  • ForEach in Section maakt dynamische groepen met herhalende elementen mogelijk
  • Nesting van Section is verboden — gebruik DisclosureGroup voor subgroepen
  • Stijl van Section hangt af van de container: Form gebruikt standaard insetGrouped, List — plain
  • Aangepaste header kan elke SwiftUI View met pictogram en aangepast lettertype zijn
  • Gebruik Section voor het logisch groeperen van invoervelden en instellingen

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook