List

在 SwiftUI 中,并没有与 UIKit 的 UITableView 完全等价的组件,但 SwiftUI 提供了更现代化的 List 组件来代替 UITableViewList 允许你轻松展示可滚动的列表,支持分组、可滑动删除、移动等功能。

1. 基本的 List 使用

struct SimpleListView: View {
    let items = ["Item 1", "Item 2", "Item 3", "Item 4"]

    var body: some View {
        List(items, id: \.self) { item in
            Text(item)
        }
    }
}

这个例子展示了如何使用 List 显示一个字符串数组。SwiftUI 会自动处理列表的布局和滚动。

2. 自定义行内容

你可以为列表的每一行自定义内容,不局限于 Text

struct CustomRowListView: View {
    let items = ["Item 1", "Item 2", "Item 3", "Item 4"]

    var body: some View {
        List(items, id: \.self) { item in
            HStack {
                Image(systemName: "star")
                Text(item)
                    .font(.headline)
                Spacer()
                Image(systemName: "chevron.right")
            }
            .padding()
        }
    }
}

在这个例子中,每一行不仅包含文本,还包含图片和其他自定义视图。

3. 动态数据源 List with ForEach

当你有动态数据时,可以结合 ForEachList 一起使用:

这个 List 会随着 items 数组的变化自动更新显示。

4. 可删除和移动的列表

SwiftUI 中的 List 也支持可滑动删除和移动功能,类似于 UITableView 的行为:

可删除功能:

通过在 ForEach 后添加 .onDelete,你可以实现滑动删除功能。

可移动功能:

这里添加了 .onMove 方法,让用户可以在编辑模式下拖动来重新排序列表。EditButton 是 SwiftUI 提供的用于切换列表编辑状态的按钮。

5. 分组的 List

List 也支持分组列表:

通过使用 Section,你可以在列表中添加分组,并为每一组定义一个标题。

6. 列表的样式

你可以通过 .listStyle 修饰符来改变列表的显示样式,例如默认、分组、内嵌样式等:

常见的列表样式包括:

  • .plain:默认的列表样式。

  • .grouped:带分组的列表样式。

  • .insetGrouped:内嵌分组样式,类似于设置页面的样式。

7. 支持复杂的数据模型

List 不仅支持简单数据,还支持复杂的数据模型展示:

在这里,Person 是一个符合 Identifiable 协议的结构体,用于展示更复杂的数据。

总结

SwiftUI 中的 List 提供了替代 UIKit UITableView 的现代化解决方案,支持动态数据、分组、滑动删除、移动等功能,并且使用更加简洁且易于理解的声明式语法。

Last updated