SwiftUI Safe Area 安全區域教學
隨著 iPhone X 的推出,出現了「瀏海 (Notch)」和底部的「Home Indicator」。為了避免內容被這些硬體特徵遮擋,iOS 引入了 Safe Area (安全區域) 的概念。
什麼是 Safe Area?
Safe Area 是一個矩形區域,保證在這個區域內的內容完全可見,不會被圓角、瀏海、相機開孔或系統手勢條遮擋。
在 SwiftUI 中,所有的 View 預設都會自動限制在 Safe Area 內。
忽略安全區域 (Ignores Safe Area)
有時候我們希望背景顏色、圖片或地圖能夠滿版延伸到螢幕的最邊緣(包含瀏海後面),這時候就需要使用 .ignoresSafeArea()。
ZStack {
Color.blue
.ignoresSafeArea() // 讓藍色背景延伸到全螢幕,包含狀態列
VStack {
Text("內容仍在安全區域內")
Spacer()
}
}
指定方向與區域
你可以控制忽略哪些邊緣或區域:
// 只忽略頂部 (狀態列/瀏海)
.ignoresSafeArea(.container, edges: .top)
// 只忽略底部 (Home Indicator)
.ignoresSafeArea(.container, edges: .bottom)
鍵盤避讓 (Keyboard Avoidance)
Safe Area 的另一個重要功能是與鍵盤的互動。在 SwiftUI 中,當虛擬鍵盤彈出時,safe area 的底部邊界會自動向上移動,這通常會自動推擠你的視圖,避免輸入框被鍵盤遮住。
大多數情況下你不需要做任何事,這就是 SwiftUI 的魔術!
VStack {
Spacer()
TextField("輸入訊息...", text: $text)
.padding() // 這個輸入框會自動隨鍵盤升起
}
如果在某些複雜佈局中鍵盤遮擋了內容,請檢查你是否錯誤地使用了 .ignoresSafeArea(.keyboard)。