SwiftUI List 列表視圖教學
List 是 iOS App 中最常見的 UI 元件,對應到 UIKit 的 UITableView。它用來垂直顯示一系列的資料行 (Row),並且自動支援捲動。
靜態列表
如果你的項目是固定的,可以直接像 VStack 一樣列出來:
List {
Text("第一項")
Text("第二項")
Text("第三項")
}
動態列表
大多數情況下,我們需要顯示從陣列來的資料。這時候需要使用 ForEach 或者直接將陣列傳給 List。
值得注意的是,要在 List 中識別每一個項目,資料本身應該遵循 Identifiable 協議,或者顯式指定 id。
struct Ocean: Identifiable {
let id = UUID() // 唯一識別碼
let name: String
}
struct OceanListView: View {
let oceans = [
Ocean(name: "Pacific"),
Ocean(name: "Atlantic"),
Ocean(name: "Indian"),
Ocean(name: "Arctic"),
Ocean(name: "Southern")
]
var body: some View {
List(oceans) { ocean in // List 會自動遍歷陣列
Text(ocean.name)
}
}
}
混合內容 (Section)
你可以在 List 中混合靜態和動態內容,並使用 Section 進行分組。
List {
Section(header: Text("靜態區域")) {
Text("關於我們")
Text("版本資訊")
}
Section(header: Text("海洋列表")) {
ForEach(oceans) { ocean in
Text(ocean.name)
}
}
}
.listStyle(.grouped) // 改變列表樣式為群組風格
樣式 (.listStyle)
List 提供了多種內建樣式,會根據平台自動適配:
.plain: 純列表 (無背景色).grouped: 群組樣式 (類似 iOS 設定頁面).insetGrouped: 圓角群組樣式 (iOS 15 設定頁面預設).sidebar: 側邊欄樣式 (iPad/macOS 常用)
學會顯示列表後,接下來我們要學習如何讓使用者對列表進行操作,例如刪除和移動項目。