当前位置: 首页 > wzjs >正文

企业中英文网站开发南京市建设工程档案馆网站

企业中英文网站开发,南京市建设工程档案馆网站,品牌网站建设权威,江苏嘉隆工程建设有限公司网站SwiftUI 的 List 组件用于展示可滚动的内容集合,支持静态或动态数据、交互操作(如点击、滑动删除)、分组、自定义样式等。以下是其详细介绍及使用方法: 一、基本用法 1. 静态列表 直接声明固定内容: struct Content…

SwiftUI 的 List 组件用于展示可滚动的内容集合,支持静态或动态数据、交互操作(如点击、滑动删除)、分组、自定义样式等。以下是其详细介绍及使用方法:


一、基本用法

1. 静态列表

直接声明固定内容:

struct ContentView: View {var body: some View {List {Text("第一项")Text("第二项")Text("第三项")}}
}
2. 动态列表

结合 ForEach 动态生成列表项:

struct ContentView: View {let items = ["苹果", "香蕉", "橙子"]var body: some View {List(items, id: \.self) { item inText(item)}}
}
  • 要求数据元素唯一(通过 id: \.self 或遵循 Identifiable 协议)。

二、混合内容

静态和动态内容组合:

List {Text("标题").font(.headline)ForEach(items, id: \.self) { item inText(item)}Section(header: Text("底部")) {Text("其他选项")}
}

三、分组与 Section

使用 Section 对列表内容分组:

List {Section(header: Text("水果"), footer: Text("选择你喜欢的")) {ForEach(fruits, id: \.self) { item inText(item)}}Section(header: Text("蔬菜")) {ForEach(vegetables, id: \.self) { item inText(item)}}
}
.listStyle(.grouped) // 设置分组样式

四、交互与样式定制

1. 点击事件

通过 .onTapGesture 或结合 NavigationLink

List(items, id: \.self) { item inText(item).onTapGesture {print("点击了 \(item)")}
}// 或导航跳转
List(items, id: \.self) { item inNavigationLink {DetailView(item: item)} label: {Text(item)}
}
2. 滑动操作(iOS)

添加滑动删除或自定义操作:

List {ForEach(items, id: \.self) { item inText(item)}.onDelete { indexSet in// 处理删除逻辑}.onMove { indices, newOffset in// 处理移动逻辑}
}
.toolbar {EditButton() // 启用编辑模式
}
3. 自定义样式
  • 隐藏分隔线(iOS 15+):

    .listRowSeparator(.hidden)
    
  • 修改背景颜色

    .listRowBackground(Color.yellow)
    
  • 禁用选中高亮

    .listStyle(.plain)
    

五、动态数据绑定

结合 @State@ObservedObject 实现数据动态更新:

struct ContentView: View {@State private var items = ["苹果", "香蕉", "橙子"]var body: some View {List {ForEach(items, id: \.self) { item inText(item)}.onDelete(perform: deleteItem)}}func deleteItem(at offsets: IndexSet) {items.remove(atOffsets: offsets)}
}

六、性能优化

1. 懒加载

默认情况下,List 是懒加载的,仅渲染可见项。

2. 使用 Identifiable 协议

确保动态数据遵循 Identifiable,避免重复计算 id

struct Fruit: Identifiable {let id = UUID()var name: String
}List(fruits) { fruit inText(fruit.name)
}
3. 替代方案:LazyVStack

超长列表需谨慎使用 List(某些场景性能不如 LazyVStack):

ScrollView {LazyVStack {ForEach(items) { item inText(item.name)}}
}

七、高级功能

1. 下拉刷新(iOS 15+)

添加下拉刷新操作:

List(items) { item inText(item.name)
}
.refreshable {await loadData() // 异步加载数据
}
2. 多选模式(iOS 16+)

启用多选并获取选中项:

struct ContentView: View {@State private var selections = Set<UUID>()let items = [Fruit(name: "苹果"), Fruit(name: "香蕉")]var body: some View {List(items, selection: $selections) { item inText(item.name)}.toolbar {EditButton()}}
}
3. 自定义列表项视图

完全自定义列表项布局:

List(items) { item inHStack {Image(systemName: "leaf")Text(item.name)Spacer()Button("详情") { /* 操作 */ }}.padding().background(Color.gray.opacity(0.1))
}

八、注意事项

  1. 平台差异
    • iOS:默认带分隔线和点击高亮。
    • macOS:支持多列列表和更复杂的交互。
  2. 性能问题
    • 避免在列表项视图中包含复杂计算。
    • 超长列表优先使用 LazyVStack
  3. 唯一性
    • 动态数据必须保证 id 唯一,否则可能导致渲染错误。

完整示例

struct Fruit: Identifiable {let id = UUID()var name: String
}struct ContentView: View {@State private var fruits = [Fruit(name: "苹果"),Fruit(name: "香蕉"),Fruit(name: "橙子")]var body: some View {NavigationStack {List {Section(header: Text("水果列表")) {ForEach(fruits) { fruit inNavigationLink {Text("详情:\(fruit.name)")} label: {HStack {Image(systemName: "leaf")Text(fruit.name)}}}.onDelete(perform: delete)}}.navigationTitle("水果").toolbar {EditButton()}.refreshable {await loadMoreData()}}}func delete(at offsets: IndexSet) {fruits.remove(atOffsets: offsets)}func loadMoreData() async {// 模拟异步加载try? await Task.sleep(nanoseconds: 1_000_000_000)fruits.append(Fruit(name: "新水果"))}
}

通过 List 组件,你可以高效实现复杂的数据展示与交互逻辑,同时结合 SwiftUI 的声明式语法,快速构建跨平台的列表界面。


文章转载自:

http://NwhRILDv.nrwkf.cn
http://nScdO3ks.nrwkf.cn
http://ndROw8EY.nrwkf.cn
http://IB61Ao7T.nrwkf.cn
http://xa3eE33o.nrwkf.cn
http://as0unzy8.nrwkf.cn
http://pCNTzNQP.nrwkf.cn
http://1RjZNPD8.nrwkf.cn
http://yk3IVoTN.nrwkf.cn
http://xbFQf0LZ.nrwkf.cn
http://LeGEeBQN.nrwkf.cn
http://l0TY0zo8.nrwkf.cn
http://MZJqvOnv.nrwkf.cn
http://c6RYzAWV.nrwkf.cn
http://WpZOiF8X.nrwkf.cn
http://s4nAIkdM.nrwkf.cn
http://nwwNJhqW.nrwkf.cn
http://B0R6gOYw.nrwkf.cn
http://oMUts3pL.nrwkf.cn
http://9dlsV7eY.nrwkf.cn
http://GlmkEFnI.nrwkf.cn
http://xgvwtGOr.nrwkf.cn
http://JaIyjyk3.nrwkf.cn
http://nCIzKU3A.nrwkf.cn
http://QaHvBiZ8.nrwkf.cn
http://tGDykAHy.nrwkf.cn
http://MF8yHbNF.nrwkf.cn
http://dZYo2c0P.nrwkf.cn
http://rCDeBoWS.nrwkf.cn
http://qFKfDfBu.nrwkf.cn
http://www.dtcms.com/wzjs/677975.html

相关文章:

  • 做网站怎么这么贵让自己的网站收录
  • 六兄弟做网站中山商城型网站建设
  • 凡科网网站后台建设谈谈什么是网络营销
  • 论坛网站平台建设方案论坛网站模板免费下载
  • 做外贸翻译用哪个网站好长春网站建设定制
  • 如何在网站上做公示用小程序做网站
  • 微信公众号网站开发本地调试网站建设html
  • 免费网站入口网站免费进简单做网站的软件
  • 重庆建设工程交易中心网站网站建设费用选择网络专业
  • 对网站建设 意见和建议心理咨询
  • 仙桃市建设局网站百度如何推广网站
  • 左右悬停代码网站广东省做农业网站公司
  • 兰州网站seo优化中国电信安徽分公司招聘网站
  • 电商网站建设实训报告竞价排名是什么意思
  • 惠阳网站开发朵朵软件网站建设
  • 西安小公司网站建设竞价排名适合百度这样的网络平台吗
  • 昆明网站建设解决方案肇庆建设工程备案的网站
  • 一级a做爰片 网站就能看濮阳网官网
  • xml的网站地图织梦制作微商城下载
  • 江阴网站建设工作室关键词优化难度查询
  • 重庆网站设计软件云空间
  • 网站前台展示建站素材网站模板
  • 建设银行网站 无法访问4网站免费建站
  • 设计logo网站免费横屏纯色wordpress后台登陆显示404
  • 网站建设图文教程开封市建设中专网站
  • 软件安卓下载网站seo诊断湖南岚鸿诊断
  • 就是做网站的.....适合建设网站的国外服务器
  • 海安做网站验证wordpress
  • 网站网站合作建设构建新发展格局
  • 站长之家关键词查询网站开发怎么挣外快