Section a SwiftUI-ban: mi ez, szekció létrehozása és csoportosítás

Szerző: IT Sectr Megjelenés: 2026-06-25 Olvasási idő: 7 perc

A Section a SwiftUI-ban egy konténer komponens az elemek logikai csoportosításához a Form vagy List belsejében. A komponens a tartalmat vizuális blokként jeleníti meg rendszer távolságokkal, lekerekített sarkokkal és opcionális fej- és lábléccel. Az Apple Developer Documentation (2025) szerint a Section nem kezeli az adatokat, csak a megjelenítést szervezi: minden gyermek elem örökli a stílusát és távolságait, biztosítva az űrlapok és listák strukturált megjelenítését.

Főbb pontok

  • Section — konténer az elemek logikai csoportosításához a Form és List elemekben
  • Fejléc Section elemek csoportja felett jelenik meg rendszer betűtípussal
  • Lábléc magyarázó szöveget ad a csoport alá kisebb betűtípussal
  • ForEach a Section belsejében dinamikus csoportok létrehozását teszi lehetővé
  • Beágyazott szekciók támogatottak a tartalom hierarchikus szervezéséhez

Mi az a Section a SwiftUI-ban?

A Section egy strukturális SwiftUI komponens, amely az elemek csoportosítására szolgál a Form és List konténereken belül. A VStack-től vagy HStack-től eltérően a Section rendszer távolságokat, fej- és láblécet, valamint a csoport vizuális kiemelését adja hozzá lekerekített sarkokkal rendelkező blokk formájában iOS-en.

A Section nem változtatja meg a gyermek elemek viselkedését — csak a megjelenítésüket szervezi. A Section belsejében lévő összes vezérlő — Picker, Toggle, TextField — normálisan működik, de vizuálisan egy logikai csoportba egyesül. Ez különösen fontos az űrlap képernyőkön, ahol a felhasználónak gyorsan kell navigálnia a bevitt adatok struktúrájában.

A rendszer automatikusan kezeli a szekciók közötti távolságokat: a Section-ök közötti távolság iOS-en 16–20 pont, a Sectionön belüli elemek között — 0 (elválasztó a sorok között). A fejlesztő nem változtathatja meg ezeket a távolságokat padding módosítókon keresztül — azokat a rendszer vezérli az egységes megjelenés biztosítása érdekében.

A Section két opcionális paramétert fogad el: header — a csoport fejléce, és footer — magyarázó szöveg a csoport alatt. A fejléc a szekció elemei felett jelenik meg félkövér caption stílusú betűtípussal, a lábléc — kisebb betűtípussal szürke színben. Mindkét paraméter bármilyen SwiftUI View-t elfogad, nem csak Text-et.

A Section fejléce segít a felhasználónak megérteni, hogy a csoporton belüli elemek melyik kategóriába tartoznak. Például a beállítások képernyőn az „Értesítések“, „Adatvédelem“ és „Fiók“ fejlécek azonnal tájékoztatják a felhasználót. Lábléc alkalmas magyarázatokra: „Kapcsolja ki az értesítéseket a találkozó idejére“ vagy „A jelszónak legalább 8 karaktert kell tartalmaznia“. A lábléc szükség esetén automatikusan több sorra törik.

swift
Section(
    header: Text("Fiók biztonsága"),
    footer: Text("Használjon erős jelszót, amely legalább 8 karakterből áll.")
) {
    SecureField("Current password", text: $currentPassword)
    SecureField("New password", text: $newPassword)
}

A példában a Section „Fiók biztonsága“ fejléccel és jelszó biztonsági tanácsot tartalmazó lábléccel rendelkezik. A felhasználó a fejlécet szekció címkeként látja, kitölt két mezőt, és azonnal elolvassa az alattuk lévő figyelmeztetést. Egy ilyen struktúra javítja az UX-t, mivel a szekcióval kapcsolatos összes információ egy képernyőn található, anélkül hogy külön súgóra lenne szükség.

Section a Form és List belsejében

A Section mind a Form, mind a List belsejében működik, de a vizuális megjelenítés eltérő. A Form-ban a Section egy blokként jelenik meg lekerekített sarkokkal és rendszer háttérrel, elválasztva a szomszédos szekcióktól távolságokkal. A List-ben a Section használhat plain stílust — háttér és lekerekítés nélkül, vagy inset-grouped — lekerekített blokkokkal, hasonlóan a Form-hoz.

A konténer kiválasztása befolyásolja a Section stílusát. Ugyanazon tartalommal rendelkező Section elhelyezése a Form és .insetGrouped stílusú List belsejében azonos eredményt ad. Azonban a Form rendszer távolságokat ad hozzá és alapértelmezés szerint grouped stílust használ, míg a List a stílus explicit megadását igényli a .listStyle(.insetGrouped) módosítón keresztül.

KonténerSection alapértelmezésElérhető stílusok
FormInsetGrouped lekerekített sarkokkal.grouped (csak Form)
ListPlain — szekció háttér nélkül.plain, .inset, .insetGrouped, .sidebar

A List-ben azonos megjelenés eléréséhez használja a .listStyle(.insetGrouped) beállítást. Ez a stílus utánozza a Form megjelenését, és alkalmas a List-re épített beállítási képernyőkhöz. Szabványos adatlistákhoz használja a .plain beállítást — szekciók kiemelése nélkül, vékony elválasztókkal a sorok között.

Dinamikus tartalom ForEach segítségével

A Section dinamikus számú elemet tartalmazhat a ForEach segítségével. Ez lehetővé teszi ismétlődő elemekkel rendelkező csoportok létrehozását, miközben a fejléc és lábléc az egész csoport számára megmarad. A Sectionön belüli ForEach végigiterál az adatgyűjteményen, és gyermek View-kat hoz létre minden elemhez, anélkül hogy megsértené a szekció struktúráját.

A dinamikus szekciók hasznosak a változó számú opcióval rendelkező beállítási képernyőkön: elérhető nyelvek listája a kiválasztáshoz, csatlakoztatott eszközök listája vagy push feliratkozások listája. A szekció fejléce statikus marad, míg a tartalom az adatoktól függően változik.

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

    var body: some View {
        Form {
            Section(header: Text("Kategóriák"),
                    footer: Text("Válassza ki a kívánt kategóriákat")) {
                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("Kiválasztva: \(selected.count) kategória")
                    .foregroundStyle(.secondary)
            }
        }
    }
}

Ebben a példában a ForEach egy Toggle-t generál a categories tömbből minden kategóriához. A szekció fejléce és lábléce egyszer van beállítva, és az egész csoportra vonatkozik. A második szekció a kiválasztott kategóriák számát jeleníti meg — nem függ a ForEach-től, és statikus marad. Ez a megközelítés rugalmas űrlapok létrehozását teszi lehetővé, ahol a fejléc és lábléc kontextusba helyezi a dinamikus elemek csoportját.

Section kód példák

Nézzünk meg egy teljes profilképernyő példát a Section használatával az adatok csoportosítására. Az űrlap három szekciót tartalmaz: felhasználói információk, adatvédelmi beállítások és statisztikák. Minden szekció a saját fejlécét használja, az utolsó pedig — láblécet összefoglaló információkkal.

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("Profil info")) {
                TextField("Display name", text: $displayName)
                TextField("Bio", text: $bio, axis: .vertical)
                    .lineLimit(3)
            }

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

            Section(header: Text("Statisztikák"),
                    footer: Text("Utolsó frissítés ma 14:30-kor")) {
                LabeledContent("Posts", value: "42")
                LabeledContent("Followers", value: "1,280")
                LabeledContent("Following", value: "346")
            }
        }
        .navigationTitle("Profile")
    }
}

Három Section egyértelműen elválasztja a funkcionális blokkokat: a profil szerkeszthető mezői, adatvédelmi kapcsolók és statisztikák. A második szekció validációt mutat be: az „E-mail megjelenítése“ Toggle ki van kapcsolva, amíg a profil nem nyilvános. A harmadik szekció lábléce az utolsó frissítés idejét mutatja — példa a lábléc használatára további kontextuális információkhoz. A LabeledContent egy szabványos SwiftUI komponens a „kulcs-érték“ pár megjelenítéséhez a Form-ban.

Section egyéni fejléccel

swift
Section(
    header: HStack {
        Image(systemName: "bell.fill")
            .foregroundStyle(.blue)
        Text("Értesítések")
            .font(.headline)
    },
    footer: Text("Push és e-mail értesítések kezelése")
) {
    Toggle("Push notifications", isOn: $push)
    Toggle("Email notifications", isOn: $email)
    Stepper("Quiet hours: \(quietStart) — \(quietEnd)",
            value: $quietStart,
            in: 0...23)
}

Ez a példa megmutatja, hogy a header bármilyen SwiftUI View lehet. Az Image és Text használata HStack-ben lehetővé teszi egy ikon hozzáadását a fejléc mellé, így a szekció vizuálisan kifejezőbbé válik. Az egyéni fejlécek hasznosak a fontos szekciók kiemelésére a felületen: értesítési beállítások, fizetős funkciók vagy figyelmeztetéseket tartalmazó szekciók. Azonban ne vigye túlzásba az egyéni fejléceket — 1–2 nem szabványos megjelenésű szekció képernyőnként elegendő a felület egységességének megőrzéséhez.

Gyakran ismételt kérdések

Beágyazhatók-e a Section-ök egymásba?

Nem, a Section nem támogatja a beágyazást a SwiftUI-ban. Ha egy Section-t egy másik Section belsejébe helyez, az fordítási hibát okoz. Hierarchikus csoportosításhoz használja a List-et OutlineGroup vagy DisclosureGroup segítségével a Sectionön belül.

Hogyan lehet megváltoztatni a Section-ök közötti távolságot?

A Section-ök közötti távolságot a rendszer kezeli, és nem változtatható meg padding módosítókon keresztül. iOS-en a szekciók közötti távolság 16–20 pont, és megfelel a HIG-nek. Az egyetlen mód a távolság befolyásolására az egyéni ListStyle használata, de ez nem ajánlott.

Miben különbözik a Section a Group-tól a SwiftUI-ban?

A Group egy láthatatlan konténer az elemek csoportosításához vizuális formázás nélkül. A Section fejlécet, láblécet, távolságokat és vizuális blokkot ad hozzá. A Group feltételes megjelenítésre, a Section a felület strukturálására szolgál.

Támogatja a Section az Accessibility-t?

Igen, a Section automatikusan hozzáad akadálymentesítési címkéket. A szekció fejléce a csoport akadálymentesítési címkéjévé válik, a lábléc pedig akadálymentesítési tippé. A VoiceOver a szekcióba lépés előtt felolvassa a fejlécet, ami javítja a navigációt a fogyatékkal élő felhasználók számára.

Használható a Section Form vagy List nélkül?

Nem, a Section csak a Form vagy List belsejében működik. A Section használata ezeken a konténereken kívül fordítási hibát okoz. Az elemek csoportosításához VStack-ben vagy ScrollView-ben használja a Group-ot vagy egyéni View-kat a távolságok manuális beállításával.

Összefoglaló

  • Section — konténer az elemek csoportosításához a Form és List elemekben rendszer távolságokkal
  • Header és footer — opcionális paraméterek a csoporttal kapcsolatos kontextuális információkhoz
  • ForEach a Section belsejében lehetővé teszi dinamikus csoportok létrehozását ismétlődő elemekkel
  • Beágyazás Section esetében tilos — alcsoportokhoz használja a DisclosureGroup-t
  • Stílus Section a konténertől függ: a Form alapértelmezés szerint insetGrouped, a List plain
  • Egyéni header bármilyen SwiftUI View lehet ikonnal és egyéni betűtípussal
  • Használja a Section-t a beviteli mezők és beállítások logikai csoportosításához

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is