SwiftUI直通车系列(2)—— 列表视图

SwiftUI直通车系列(2)—— 列表视图

    列表视图的开发中非常常用的页面元素。SwiftUI中也有专门用来渲染列表的元素提供。

一、编写行视图

      列表实际上是一组行视图的组合,在布局列表视图之前,你首先需要定义好行视图的布局。例如,我们使用一个Image元素和两个Text元素来布局一个简单的联系人行视图。

1struct RowContent:View { 2 var body: some View { 3 HStack(alignment:.top) { 4 Image("demo").resizable().frame(width: 70, height: 70) 5 VStack(alignment:.leading, spacing: 10) { 6 Text("王小丫").bold().font(Font.system(size: 25)) 7 Text("15137344444").font(Font.system(size: 20)) 8 } 9 Spacer() 10 }.padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) 11 } 12}

在预览界面上与布局情况进行预览,如下图:

      

二、关联数据

     列表中展示的数据往往是一组相似类型的数据。以上联系人行视图为例,我们可以定义一组联系人数据来填充到列表的行视图中。首先定义一个结构体用来描述联系人信息,如下:

1struct ContactModel { 2 var name:String 3 var phone:String 4} 5 6let modelData = [ 7 ContactModel(name:"王小丫", phone:"15137348888"), 8 ContactModel(name:"李小二", phone:"15137348989") 9]

如上代码所示,其中ContactModel定义了联系人的基本信息,modelData是一组联系人模型,实际应用中,modelData的数据来源可能是网络,也可能是本地文件。修改RowContent代码如下:

1struct RowContent:View { 2 3 var contactModel:ContactModel 4 5 var body: some View { 6 HStack(alignment:.top) { 7 Image("demo").resizable().frame(width: 70, height: 70) 8 VStack(alignment:.leading, spacing: 10) { 9 Text(self.contactModel.name).bold().font(Font.system(size: 25)) 10 Text(self.contactModel.phone).font(Font.system(size: 20)) 11 } 12 Spacer() 13 }.padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) 14 } 15}

SwiftUI的实时预览功能也支持对一组组件进行预览,示例如下:

1struct ContentView_Previews: PreviewProvider { 2 static var previews: some View { 3 Group { 4 RowContent(contactModel: modelData[0]) 5 RowContent(contactModel: modelData[1]) 6 }.previewLayout(.fixed(width: 400, height: 80)) 7 } 8}

效果如下图所示:

三、使用列表组件

     SwiftUI中使用List组件来构建列表,将布局好的列表行视图嵌入其中即可展示出列表界面,如下:

1struct ListContent:View { 2 var body: some View { 3 List { 4 RowContent(contactModel: modelData[0]) 5 RowContent(contactModel: modelData[1]) 6 } 7 } 8} 9 10struct ContentView_Previews: PreviewProvider { 11 static var previews: some View { 12 ListContent() 13 } 14}

此时,预览效果如下图所示:

在实际开发中,一般我会采用动态的方式来构建列表,通过对数据源的便利,可以循环生成列表行,示例如下:

1struct ListContent:View { 2 var body: some View { 3 List(modelData, id: \.name) { model in 4 RowContent(contactModel: model) 5 } 6 } 7}

其中id是一个行标识字段,使用数据源中能够保证唯一的字段来设置即可。

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:805263726

点赞
收藏

评论区

加载中...

相关推荐

SwiftUI直通车系列(3)—— 使用导航

SwiftUI直通车系列三(3)——使用导航  关于SwiftUI,我们前两篇博客介绍了独立组件的布局与属性设置相关内容,并且介绍了开发中最常用的列表视图的使用。但是一个完整的应用程序不可能是单界面的,如何使用SwiftUI进行界面间的导航跳转,是我们本博客讨论的重点。前两篇博客地址如下:Swi

SwiftUI直通车系列(4)—— 处理用户交互

SwiftUI直通车系列(4)——处理用户交互前情回顾:SwiftUI直通车系列(1)——视图的布局与组织(https://my.oschina.net/u/2340880/blog/4529951)SwiftUI直通车系列(2)——列表视图(https://my.oschina.n

SwiftUI直通车系列(1)—— 视图的布局与组织

SwiftUI直通车系列(1)——视图的布局与组织一、引言    SwiftUI提供了一种更快、更高效也更简单的页面开发方式。我们知道相对于ObjectiveC,Swift语言本身就更加高效简洁,SwiftUI采用了结构化的布局方式,使得应用的界面开发更加直观快速。本系列博客,

SwiftUI直通车系列(5)—— 自定义绘制

SwiftUI直通车系列(5)——自定义绘制前情回顾:SwiftUI直通车系列(1)——视图的布局与组织(https://my.oschina.net/u/2340880/blog/4529951)SwiftUI直通车系列(2)——列表视图(https://my.oschina.net

IOS开发

在SwiftUI中显示模态视图简介这里教大家如何弹出一个简单的模态视图。分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B。我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图。步骤在A视图中创建按钮和模态视图代码

SwiftUI直通车系列(6)—— 使用动画

SwiftUI直通车系列(6)——使用动画   本系列博客是针对SwiftUI开发框架的快速入门介绍,之前系列博客地址:SwiftUI直通车系列(1)——视图的布局与组织(https://my.oschina.net/u/2340880/blog/4529951)SwiftUI直通车系列