HStack: τι είναι, HStack VStack ZStack στο SwiftUI

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-02-24 Χρόνος ανάγνωσης: 7 λεπ

Θα αναλύσουμε τι είναι τα HStack, VStack και ZStack στο SwiftUI — κοντέινερ-στοίβες για τη δημιουργία διεπαφών χρήστη σε όλες τις πλατφόρμες της Apple. Το HStack τοποθετεί στοιχεία οριζόντια, το VStack — κάθετα, το ZStack — σε βάθος (επικάλυψη). Οι στοίβες αποτελούν τη βάση του SwiftUI: κάθε προβολή χτίζεται από ένθετες στοίβες με παραμέτρους alignment και spacing. Σύμφωνα με το Apple WWDC 2024, πάνω από το 90% των οθονών σε εφαρμογές SwiftUI χρησιμοποιούν συνδυασμό αυτών των τριών στοιβών.

Κύρια σημεία

  • HStack — η οριζόντια στοίβα SwiftUI, που τοποθετεί τα θυγατρικά στοιχεία σε μια σειρά από αριστερά προς τα δεξιά.
  • VStack — η κάθετη στοίβα SwiftUI, που τοποθετεί στοιχεία από πάνω προς τα κάτω με ρύθμιση στοίχισης.
  • ZStack — η στοίβα βάθους SwiftUI για επικάλυψη στοιχείων το ένα πάνω στο άλλο κατά μήκος του άξονα Z.
  • Και οι τρεις στοίβες υποστηρίζουν τις παραμέτρους alignment (στοίχιση) και spacing (απόσταση μεταξύ στοιχείων).
  • Σύμφωνα με το Apple Docs (2025), οι στοίβες προσαρμόζονται αυτόματα στο περιεχόμενο, αλλά μπορούν να τεντωθούν σε όλο τον διαθέσιμο χώρο με frame(maxWidth: .infinity).

Τι είναι το HStack στο SwiftUI;

HStack (Horizontal Stack) — είναι ένα κοντέινερ SwiftUI που τοποθετεί τις θυγατρικές προβολές σε μια οριζόντια γραμμή. Κάθε θυγατρικό στοιχείο καταλαμβάνει όσο χώρο χρειάζεται, εκτός εάν ορίζεται διαφορετικά. Το HStack δέχεται δύο υποχρεωτικές παραμέτρους: alignment (κάθετη στοίχιση, προεπιλογή .center) και spacing (απόσταση μεταξύ στοιχείων, προεπιλογή nil — απόσταση συστήματος). Σύμφωνα με το Apple Human Interface Guidelines (2025), το HStack είναι η προτιμώμενη επιλογή για πίνακες κουμπιών, γραμμές εισαγωγής και οριζόντιες λίστες εικονιδίων.

Swift
HStack(alignment: .center, spacing: 16) {
    Image("star")
        .resizable()
        .frame(width: 24, height: 24)
    Text("Αγαπημένα")
        .font(.body)
    Spacer()
    Image("chevron.right")
        .foregroundColor(.gray)
}
.padding()

Σε αυτό το παράδειγμα, το HStack δημιουργεί μια σειρά από τρία στοιχεία: εικονίδιο, κείμενο και βέλος. Το Spacer() απωθεί τα στοιχεία — το εικονίδιο με το κείμενο κολλούν στην αριστερή άκρη και το βέλος στη δεξιά άκρη. Το Alignment .center στοιχίζει και τα τρία στοιχεία στο κέντρο του κάθετου άξονα.

VStack: κάθετη διάταξη και στοίχιση

VStack (Vertical Stack) — είναι ένα κοντέινερ SwiftUI για κάθετη τοποθέτηση θυγατρικών στοιχείων από πάνω προς τα κάτω. Παρόμοια με το HStack, δέχεται alignment (οριζόντια στοίχιση: .leading, .center, .trailing) και spacing. Το VStack είναι η βάση για τη δημιουργία φορμών, καρτών, προφίλ και λιστών ρυθμίσεων. Σύμφωνα με το Apple Docs (2025), το VStack μαζί με το LazyVStack καλύπτει το 85% των σεναρίων κάθετης διάταξης στο SwiftUI.

Swift
VStack(alignment: .leading, spacing: 8) {
    Text("Όνομα συνταγής")
        .font(.headline)
    Text("Χρόνος προετοιμασίας: 30 λεπτά")
        .font(.subheadline)
        .foregroundColor(.secondary)
    HStack(spacing: 4) {
        Image("star.fill")
            .foregroundColor(.yellow)
        Text("4.8")
    }
}

VStack με alignment .leading στοιχίζει όλες τις σειρές στην αριστερή άκρη. Μέσα στο VStack είναι ενσωματωμένο ένα HStack για βαθμολογία — αυτό είναι ένα τυπικό μοτίβο δημιουργίας σύνθετων διατάξεων μέσω ένθετων στοιβών. Το Spacing 8 δημιουργεί ομοιόμορφη απόσταση μεταξύ των γραμμών κειμένου.

ZStack: επικάλυψη στοιχείων σε βάθος

ZStack (Z-axis Stack) — είναι ένα κοντέινερ SwiftUI για επικάλυψη θυγατρικών προβολών το ένα πάνω στο άλλο κατά μήκος του άξονα βάθους. Το πρώτο στοιχείο στο σώμα του ZStack σχεδιάζεται στο φόντο, το τελευταίο — στο προσκήνιο. Το ZStack χρησιμοποιείται για εικόνες φόντου με κείμενο από πάνω, προσαρμοσμένους δείκτες, επικαλυπτόμενα κουμπιά και κινούμενα σχέδια μετάβασης. Σύμφωνα με το Apple Docs (2025), το ZStack από προεπιλογή στοιχίζει όλα τα στοιχεία στο κέντρο (alignment: .center), αλλά υποστηρίζει οποιονδήποτε συνδυασμό Alignment.

Swift
ZStack(alignment: .bottomLeading) {
    Image("mountains")
        .resizable()
        .scaledToFill()
        .frame(height: 200)
        .clipped()
    Color.black
        .opacity(0.3)
    Text("Ορεινό τοπίο")
        .font(.title)
        .bold()
        .foregroundColor(.white)
        .padding()
}

Σε αυτό το παράδειγμα, το ZStack τοποθετεί τρία επίπεδα: εικόνα βουνού, ημιδιάφανο μαύρο χρώμα για σκουρότητα και κείμενο με τίτλο. Το Alignment .bottomLeading κολλάει το κείμενο στην κάτω αριστερή γωνία. Η σκουρότητα (Color.black.opacity(0.3)) βελτιώνει την αναγνωσιμότητα του κειμένου σε φωτεινά μέρη της εικόνας.

Σύγκριση HStack, VStack και ZStack: πότε να χρησιμοποιήσετε ποιο

Η επιλογή στοίβας εξαρτάται από την κατεύθυνση διάταξης: HStack — οριζόντια διάταξη (κουμπιά, γραμμές εισαγωγής), VStack — κάθετη διάταξη (φόρμες, κάρτες), ZStack — επικάλυψη (φόντα, επικαλύψεις). Σύμφωνα με το Apple Human Interface Guidelines (2025), για σύνθετες διατάξεις οι στοίβες ενσωματώνονται η μία μέσα στην άλλη: το εξωτερικό VStack περιέχει HStack και ZStack εσωτερικά. Τα LazyHStack και LazyVStack είναι τεμπέλικες εκδόσεις για μεγάλες συλλογές.

ΣτοίβαΆξοναςΠροεπιλεγμένο AlignmentΠότε να χρησιμοποιήσετεΤεμπέλικη έκδοση
HStackΟριζόντιος.centerΣειρά κουμπιών, οριζόντιες λίστεςLazyHStack
VStackΚάθετος.centerΦόρμες, προφίλ, κάρτεςLazyVStack
ZStackΒάθος (z).centerΕπικάλυψη, φόντα, επικαλύψεις, σήματαΌχι

Alignment και Spacing: λεπτομερής ρύθμιση στοιβών

Οι παράμετροι alignment και spacing δίνουν πλήρη έλεγχο πάνω στην τοποθέτηση των θυγατρικών στοιχείων στις στοίβες SwiftUI. Το alignment στο HStack ελέγχει την κάθετη στοίχιση στοιχείων διαφορετικού ύψους. Το alignment στο VStack ελέγχει την οριζόντια στοίχιση. Το spacing καθορίζει την απόσταση μεταξύ όλων των θυγατρικών στοιχείων στη στοίβα. Σύμφωνα με το SwiftUI Lab (2025), το alignment μπορεί να είναι είτε τυπικό (.top, .center, .bottom) είτε προσαρμοσμένο μέσω AlignmentID.

Swift
HStack(alignment: .top, spacing: 12) {
    Text("Τίτλος")
        .font(.largeTitle)
    VStack(alignment: .leading) {
        Text("Υπότιτλος")
        Text("Περιγραφή με επιπλέον κείμενο")
            .font(.caption)
            .foregroundColor(.gray)
    }
}
.padding()

Εδώ το alignment .top στοιχίζει τον μεγάλο τίτλο και την ένθετη VStack στην πάνω άκρη. Το Spacing 12 δημιουργεί απόσταση μεταξύ τους. Η ένθετη VStack με alignment .leading στοιχίζει τον υπότιτλο και την περιγραφή στην αριστερή άκρη. Ο συνδυασμός διαφορετικών alignment μέσα σε ένθετες στοίβες επιτρέπει τον ακριβή έλεγχο της διάταξης.

Ένθετες στοίβες: παραδείγματα δημιουργίας σύνθετων διατάξεων

Οι πραγματικές διεπαφές χτίζονται με συνδυασμό ένθετων HStack, VStack και ZStack. Κάρτα προϊόντος — ένα τυπικό παράδειγμα: το εξωτερικό VStack περιέχει εικόνα (ZStack με επικάλυψη), τίτλο (Text), βαθμολογία (HStack) και τιμή. Σύμφωνα με το Apple Sample Projects (2025), το βάθος ένθεσης στοιβών σπάνια υπερβαίνει τα 4 επίπεδα — η βαθύτερη ένθεση μειώνει την αναγνωσιμότητα κώδικα και την απόδοση.

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()

Σε αυτό το παράδειγμα, το VStack συνδυάζει ZStack (εικόνα με σήμα έκπτωσης), όνομα προϊόντος και HStack (τιμή + βαθμολογία). Το ZStack χρησιμοποιεί alignment .topTrailing για να τοποθετήσει το σήμα «-20%» στην πάνω δεξιά γωνία. Το Spacer στο HStack απωθεί την τιμή προς την αριστερή άκρη και τη βαθμολογία προς τη δεξιά άκρη.

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ HStack και VStack;

HStack τοποθετεί στοιχεία οριζόντια (από αριστερά προς τα δεξιά), VStack — κάθετα (από πάνω προς τα κάτω). Και τα δύο υποστηρίζουν alignment και spacing. Το HStack στοιχίζει κάθετα (top, center, bottom), το VStack — οριζόντια (leading, center, trailing). Η επιλογή εξαρτάται από την κατεύθυνση διάταξης: για σειρά κουμπιών χρησιμοποιήστε HStack, για φόρμα — VStack.

Πότε να χρησιμοποιήσω ZStack αντί για overlay;

ZStack και overlay — διαφορετικές προσεγγίσεις για επικάλυψη. Το ZStack συνδυάζει όλα τα θυγατρικά στοιχεία ως ισότιμα μέρη της διάταξης. Το overlay προσκολλάται σε μία προβολή και τεντώνεται μαζί της. Σύμφωνα με το SwiftUI Lab (2025), το overlay είναι προτιμότερο για μικρά στοιχεία πάνω από μία προβολή (σήμα, εικονίδιο), το ZStack — για πλήρεις πολυσυστατικές επικαλύψεις.

Πώς να κάνω τα στοιχεία ίδιου μεγέθους σε μια στοίβα SwiftUI;

Χρησιμοποιήστε τον τροποποιητή .frame(maxWidth: .infinity) για HStack ή .frame(maxHeight: .infinity) για VStack. Για να έχουν όλα τα θυγατρικά στοιχεία σε ένα HStack το ίδιο πλάτος, προσθέστε σε κάθε ένα .frame(maxWidth: .infinity). Για VStack — .fixedSize(horizontal: false, vertical: true) για εξαναγκασμένο κάθετο μέγεθος.

Σύνοψη

  • HStack — οριζόντια τοποθέτηση στοιχείων από αριστερά προς τα δεξιά με παραμέτρους alignment και spacing.
  • VStack — κάθετη τοποθέτηση στοιχείων από πάνω προς τα κάτω, βάση για φόρμες και κάρτες.
  • ZStack — επικάλυψη στοιχείων κατά μήκος του άξονα βάθους για φόντα, επικαλύψεις και σήματα.
  • Οι στοίβες ενσωματώνονται η μία μέσα στην άλλη για τη δημιουργία σύνθετων διατάξεων με μέγιστο βάθος 4 επιπέδων.
  • Το alignment στο HStack ελέγχει την κάθετη στοίχιση, στο VStack — την οριζόντια, στο ZStack — σε όλους τους άξονες.
  • Το Spacer() μέσα σε στοίβες δημιουργεί ευέλικτα κενά, απωθώντας τα στοιχεία προς τις άκρες.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης