HStack: vad är det, HStack VStack ZStack i SwiftUI

Författare: IT Sectr Publicerad: 2026-02-24 Lästid: 7 min

Vi går igenom vad HStack, VStack och ZStack är i SwiftUI — container-stackar för att bygga användargränssnitt på alla Apple-plattformar. HStack placerar element horisontellt, VStack — vertikalt, ZStack — på djupet (överlagring). Stackar är grunden i SwiftUI: varje vy byggs av kapslade stackar med parametrarna alignment och spacing. Enligt Apple WWDC 2024 använder över 90% av skärmarna i SwiftUI-appar en kombination av dessa tre stackar.

Huvudpunkter

  • HStack — SwiftUI:s horisontella stack, som placerar underordnade element i en rad från vänster till höger.
  • VStack — SwiftUI:s vertikala stack, som placerar element uppifrån och ned med justering.
  • ZStack — SwiftUI:s djupstack för att överlagra element ovanpå varandra längs Z-axeln.
  • Alla tre stackar stöder parametrarna alignment (justering) och spacing (avstånd mellan element).
  • Enligt Apple Docs (2025) anpassar sig stackar automatiskt till innehållet men kan sträckas ut över hela tillgängliga utrymmet med frame(maxWidth: .infinity).

Vad är HStack i SwiftUI?

HStack (Horizontal Stack) — är en SwiftUI-container som placerar underordnade vyer i en horisontell linje. Varje underordnat element tar upp så mycket plats som det behöver, om inte annat anges. HStack accepterar två obligatoriska parametrar: alignment (vertikal justering, standard .center) och spacing (avstånd mellan element, standard nil — systemavstånd). Enligt Apple Human Interface Guidelines (2025) är HStack det föredragna valet för knapppaneler, inmatningsrader och horisontella ikonlistor.

Swift
HStack(alignment: .center, spacing: 16) {
    Image("star")
        .resizable()
        .frame(width: 24, height: 24)
    Text("Favoriter")
        .font(.body)
    Spacer()
    Image("chevron.right")
        .foregroundColor(.gray)
}
.padding()

I detta exempel skapar HStack en rad med tre element: ikon, text och pil. Spacer() trycker isär elementen — ikonen med texten trycks mot vänsterkanten och pilen mot högerkanten. Alignment .center justerar alla tre elementen i mitten av den vertikala axeln.

VStack: vertikal layout och justering

VStack (Vertical Stack) — är en SwiftUI-container för vertikal placering av underordnade element uppifrån och ned. Liksom HStack accepterar den alignment (horisontell justering: .leading, .center, .trailing) och spacing. VStack är grunden för att bygga formulär, kort, profiler och inställningslistor. Enligt Apple Docs (2025) täcker VStack tillsammans med LazyVStack 85% av vertikala layoutsituationer i SwiftUI.

Swift
VStack(alignment: .leading, spacing: 8) {
    Text("Receptnamn")
        .font(.headline)
    Text("Tillagningstid: 30 min")
        .font(.subheadline)
        .foregroundColor(.secondary)
    HStack(spacing: 4) {
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.8")
    }
}

VStack med alignment .leading justerar alla rader till vänsterkanten. Inuti VStack finns en kapslad HStack för betyg — detta är ett typiskt mönster för att bygga komplexa layouter genom kapslade stackar. Spacing 8 skapar ett jämnt avstånd mellan textraderna.

ZStack: överlagring av element på djupet

ZStack (Z-axis Stack) — är en SwiftUI-container för att överlagra underordnade vyer ovanpå varandra längs djupaxeln. Det första elementet i ZStack:s kropp ritas i bakgrunden, det sista — i förgrunden. ZStack används för bakgrundsbilder med text över, anpassade indikatorer, överlagringsknappar och övergångsanimationer. Enligt Apple Docs (2025) justerar ZStack som standard alla element i mitten (alignment: .center), men stöder alla kombinationer av Alignment.

Swift
ZStack(alignment: .bottomLeading) {
    Image("mountains")
        .resizable()
        .scaledToFill()
        .frame(height: 200)
        .clipped()
    Color.black
        .opacity(0.3)
    Text("Bergslandskap")
        .font(.title)
        .bold()
        .foregroundColor(.white)
        .padding()
}

I detta exempel överlagrar ZStack tre lager: en bild av berg, en halvgenomskinlig svart färg för mörkläggning och text med en titel. Alignment .bottomLeading trycker texten till det nedre vänstra hörnet. Mörkläggningen (Color.black.opacity(0.3)) förbättrar läsbarheten av texten på ljusa delar av bilden.

Jämförelse av HStack, VStack och ZStack: när ska vilken användas

Valet av stack beror på layoutriktningen: HStack — horisontell layout (knappar, inmatningsrader), VStack — vertikal layout (formulär, kort), ZStack — överlagring (bakgrunder, överlägg). Enligt Apple Human Interface Guidelines (2025) kapslas stackar inuti varandra för komplexa layouter: den yttre VStacken innehåller HStack och ZStack inuti. LazyHStack och LazyVStack är lata versioner för stora samlingar.

StackAxelStandard AlignmentNär ska användasLat version
HStackHorisontell.centerKnapprader, horisontella listorLazyHStack
VStackVertikal.centerFormulär, profiler, kortLazyVStack
ZStackDjup (z).centerÖverlagring, bakgrunder, överlägg, märkenNej

Alignment och Spacing: finjustering av stackar

Parametrarna alignment och spacing ger full kontroll över placeringen av underordnade element i SwiftUI-stackar. Alignment i HStack styr vertikal justering av element med olika höjd. Alignment i VStack styr horisontell justering. Spacing bestämmer avståndet mellan alla underordnade element i stacken. Enligt SwiftUI Lab (2025) kan alignment vara både standard (.top, .center, .bottom) och anpassad via AlignmentID.

Swift
HStack(alignment: .top, spacing: 12) {
    Text("Rubrik")
        .font(.largeTitle)
    VStack(alignment: .leading) {
        Text("Underrubrik")
        Text("Beskrivning med ytterligare text")
            .font(.caption)
            .foregroundColor(.gray)
    }
}
.padding()

Här justerar alignment .top den stora titeln och den kapslade VStacken mot den övre kanten. Spacing 12 skapar avstånd mellan dem. Den kapslade VStacken med alignment .leading justerar underrubriken och beskrivningen mot vänsterkanten. Kombination av olika alignment inuti kapslade stackar möjliggör precis kontroll av layouten.

Kapslade stackar: exempel på att bygga komplexa layouter

Verkliga gränssnitt byggs genom kombination av kapslade HStack, VStack och ZStack. Produktkort — ett typiskt exempel: den yttre VStacken innehåller en bild (ZStack med överlägg), titel (Text), betyg (HStack) och pris. Enligt Apple Sample Projects (2025) överstiger kapslingsdjupet för stackar sällan 4 nivåer — djupare kapsling minskar kodläsbarhet och prestanda.

Swift
VStack(spacing: 12) {
    ZStack(alignment: .topTrailing) {
        Image("product")
            .resizable()
            .scaledToFit()
        Text("-20%")
            .font(.caption)
            .bold()
            .foregroundColor(.white)
            .padding(6)
            .background(Color.red)
            .cornerRadius(4)
    }
    Text("Smartphone Model X")
        .font(.headline)
    HStack(spacing: 8) {
        Text("$999")
            .font(.title2)
            .bold()
        Spacer()
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.7")
    }
}
.padding()

I detta exempel kombinerar VStack ZStack (bild med rabattmärke), produktnamn och HStack (pris + betyg). ZStack använder alignment .topTrailing för att placera «-20%»-märket i det övre högra hörnet. Spacer i HStack trycker priset mot vänsterkanten och betyget mot högerkanten.

Vanliga frågor

Vad är skillnaden mellan HStack och VStack?

HStack placerar element horisontellt (från vänster till höger), VStack — vertikalt (uppifrån och ned). Båda stöder alignment och spacing. HStack justerar vertikalt (top, center, bottom), VStack — horisontellt (leading, center, trailing). Valet beror på layoutriktningen: för en knapprad använd HStack, för ett formulär — VStack.

När ska jag använda ZStack istället för overlay?

ZStack och overlay är olika sätt att överlagra. ZStack kombinerar alla underordnade element som likvärdiga delar av layouten. Overlay fäster vid en vy och sträcks med den. Enligt SwiftUI Lab (2025) är overlay att föredra för små element ovanpå en vy (märke, ikon), ZStack — för fullfjädrade flerkomponentöverlägg.

Hur gör man element lika stora i en SwiftUI-stack?

Använd modifieraren .frame(maxWidth: .infinity) för HStack eller .frame(maxHeight: .infinity) för VStack. För att alla underordnade element i en HStack ska ha samma bredd, lägg till .frame(maxWidth: .infinity) till varje. För VStack — .fixedSize(horizontal: false, vertical: true) för tvingad vertikal storlek.

Sammanfattning

  • HStack — horisontell placering av element från vänster till höger med parametrarna alignment och spacing.
  • VStack — vertikal placering av element uppifrån och ned, grund för formulär och kort.
  • ZStack — överlagring av element längs djupaxeln för bakgrunder, överlägg och märken.
  • Stackar kapslas inuti varandra för att bygga komplexa layouter med maximalt djup på 4 nivåer.
  • Alignment i HStack styr vertikal justering, i VStack — horisontell, i ZStack — på alla axlar.
  • Spacer() inuti stackar skapar flexibla mellanrum och trycker element mot kanterna.

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å