SwiftUI 對齊與間距 (Padding & Frame)

學會了 Stack 之後,你需要精確控制 View 的大小與位置。這時候就需要用到 Padding (留白), Spacer (填充空間)Frame (框架尺寸)

Padding (留白)

.padding() 是最常用的 Modifier 之一,它會在 View 的內容周圍增加空白區域。

Text("Hello")
    .background(.yellow) // 黃色背景緊貼文字
    .padding()           // 增加系統預設的留白
    .background(.blue)   // 藍色背景包含留白區域

指定方向與大小

你可以指定要增加留白的方向 (top, bottom, leading, trailing) 以及具體的數值:

Text("標題")
    .padding(.bottom, 20) // 只在底部增加 20 points
    .padding([.leading, .trailing], 16) // 左右各增加 16 points
    .padding(.horizontal) // 水平方向 (左右) 使用系統預設值

Spacer (填充空間)

Spacer 是一個特殊的 View,它的作用是盡可能地佔據所有剩餘的空間。它在 Stack 排版中非常有用,可以用來推擠其他元件。

將元件推向邊緣

在 HStack 中使用 Spacer:

HStack {
    Text("靠左")
    Spacer() // 佔據中間所有空間
    Text("靠右")
}

在 VStack 中使用 Spacer:

VStack {
    Spacer() // 將內容推到底部
    Text("我在底部")
}

Frame (框架尺寸)

預設情況下,SwiftUI 的 View 只會佔用它內容所需的最小空間。如果你想要強制指定 View 的大小,可以使用 .frame()

Image("avatar")
    .resizable()
    .frame(width: 50, height: 50) // 指定寬高為 50x50

靈活的 Frame

除了固定數值,你也可以設定最大或最小尺寸,甚至要求它佔滿父容器:

Text("背景全滿")
    .frame(maxWidth: .infinity, maxHeight: .infinity) // 佔滿所有可用空間
    .background(.green)

Alignment (對齊)

當你設定的 Frame 比內容還大時,你可以指定內容在 Frame 裡的對齊方式:

Text("靠左上")
    .frame(width: 200, height: 100, alignment: .topLeading)
    .border(.red)

結合 Padding, Spacer 和 Frame,你就可以隨心所欲地控制畫面上每一個元素的位置了。