Alignment and spacing help arrange items neatly on the screen. They make the app look clean and easy to use.
Alignment and spacing in iOS Swift
VStack(alignment: .leading, spacing: 10) { Text("Hello") Text("World") }
alignment sets how items line up horizontally inside the stack.
spacing sets the space between each item vertically.
HStack(alignment: .center, spacing: 20) { Image(systemName: "star") Text("Favorite") }
VStack(alignment: .trailing, spacing: 5) { Text("Right aligned") Text("Text") }
Spacer()
This example shows a vertical stack with a title and a horizontal stack of menu items spaced apart by spacers. The menu items are evenly spaced across the screen.
import SwiftUI struct ContentView: View { var body: some View { VStack(alignment: .center, spacing: 20) { Text("Welcome to the app") .font(.title) HStack(spacing: 30) { Text("Home") Spacer() Text("Profile") Spacer() Text("Settings") } .padding() } .padding() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Use Spacer() to add flexible space that grows to fill available room.
Alignment options include .leading, .center, and .trailing for vertical stacks, and .top, .center, and .bottom for horizontal stacks.
Spacing controls the fixed gap between items, but spacers can create flexible gaps.
Alignment controls how items line up horizontally or vertically.
Spacing sets the fixed distance between items.
Spacers add flexible space to push items apart evenly.
Practice
Solution
Step 1: Understand text alignment modifiers
The .multilineTextAlignment modifier controls horizontal alignment of text inside its view.Step 2: Identify the center alignment option
Using .multilineTextAlignment(.center) centers the text horizontally.Final Answer:
.multilineTextAlignment(.center) -> Option BQuick Check:
Text alignment center = .multilineTextAlignment(.center) [OK]
- Confusing .frame(alignment:) with text alignment
- Using .padding() expecting alignment effect
- Thinking .background affects alignment
Solution
Step 1: Understand Spacer behavior
Spacer creates flexible space, but to fix size, we use frame modifier.Step 2: Set fixed width for horizontal spacing
Using Spacer().frame(width: 20) creates a fixed horizontal space of 20 points.Final Answer:
Spacer().frame(width: 20) -> Option AQuick Check:
Fixed horizontal space = Spacer with frame width [OK]
- Using minLength parameter which is optional and flexible
- Setting frame height instead of width for horizontal space
- Using padding which adds space inside view, not between views
VStack(alignment: .leading) {
Text("Hello")
Text("World")
}Solution
Step 1: Understand VStack alignment parameter
VStack's alignment parameter sets horizontal alignment for its child views.Step 2: Identify .leading alignment effect
Using .leading aligns all child views to the left edge horizontally.Final Answer:
Both texts aligned to the leading (left) edge horizontally -> Option AQuick Check:
VStack(alignment: .leading) aligns children left [OK]
- Assuming default center alignment overrides VStack alignment
- Confusing VStack alignment with Text alignment modifiers
- Thinking alignment affects vertical position
HStack {
Button("OK") {}
Spacer(20)
Button("Cancel") {}
}Solution
Step 1: Check Spacer usage
Spacer does not accept an integer parameter directly; it uses minLength as a named parameter.Step 2: Correct Spacer syntax
Correct usage is Spacer(minLength: 20) or Spacer().frame(width: 20) for fixed space.Final Answer:
Spacer cannot take a direct integer parameter like 20 -> Option DQuick Check:
Spacer parameter must be named minLength [OK]
- Passing integer without parameter name to Spacer
- Confusing Spacer with padding for spacing
- Thinking Button labels must be Text views
Solution
Step 1: Understand even spacing with Spacer
Using Spacer() between views adds flexible space that pushes views apart evenly.Step 2: Analyze each option
HStack { Text("One") Spacer() Text("Two") Spacer() Text("Three") } uses Spacer() between Text views inside HStack, distributing them evenly horizontally.Step 3: Exclude other options
HStack(spacing: 50) { Text("One") Text("Two") Text("Three") } uses fixed spacing, not flexible. HStack { Text("One") Text("Two") Text("Three") }.frame(maxWidth: .infinity, alignment: .center) centers all texts together. VStack { Text("One") Spacer() Text("Two") Spacer() Text("Three") } uses VStack, which stacks vertically.Final Answer:
HStack with Spacer() between Text views for even spacing -> Option CQuick Check:
Use Spacer() in HStack for even horizontal spacing [OK]
- Using fixed spacing instead of flexible Spacer
- Using VStack instead of HStack for horizontal layout
- Relying on frame alignment without spacers
Ready to prove it?
Pass the test and this pattern moves unknown
