SwiftUI直通車系列(2)—— 列表視圖
列表視圖的開發中很是經常使用的頁面元素。SwiftUI中也有專門用來渲染列表的元素提供。swift
1、編寫行視圖
列表其實是一組行視圖的組合,在佈局列表視圖以前,你首先須要定義好行視圖的佈局。例如,咱們使用一個Image元素和兩個Text元素來佈局一個簡單的聯繫人行視圖。網絡
struct RowContent:View { var body: some View { HStack(alignment:.top) { Image("demo").resizable().frame(width: 70, height: 70) VStack(alignment:.leading, spacing: 10) { Text("王小丫").bold().font(Font.system(size: 25)) Text("15137344444").font(Font.system(size: 20)) } Spacer() }.padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) } }
在預覽界面上與佈局狀況進行預覽,以下圖:ide
2、關聯數據
列表中展現的數據每每是一組類似類型的數據。以上聯繫人行視圖爲例,咱們能夠定義一組聯繫人數據來填充到列表的行視圖中。首先定義一個結構體用來描述聯繫人信息,以下:佈局
struct ContactModel { var name:String var phone:String } let modelData = [ ContactModel(name:"王小丫", phone:"15137348888"), ContactModel(name:"李小二", phone:"15137348989") ]
如上代碼所示,其中ContactModel定義了聯繫人的基本信息,modelData是一組聯繫人模型,實際應用中,modelData的數據來源多是網絡,也多是本地文件。修改RowContent代碼以下:spa
struct RowContent:View { var contactModel:ContactModel var body: some View { HStack(alignment:.top) { Image("demo").resizable().frame(width: 70, height: 70) VStack(alignment:.leading, spacing: 10) { Text(self.contactModel.name).bold().font(Font.system(size: 25)) Text(self.contactModel.phone).font(Font.system(size: 20)) } Spacer() }.padding(EdgeInsets(top: 10, leading: 20, bottom: 10, trailing: 20)) } }
SwiftUI的實時預覽功能也支持對一組組件進行預覽,示例以下:code
struct ContentView_Previews: PreviewProvider { static var previews: some View { Group { RowContent(contactModel: modelData[0]) RowContent(contactModel: modelData[1]) }.previewLayout(.fixed(width: 400, height: 80)) } }
效果以下圖所示:blog
3、使用列表組件
SwiftUI中使用List組件來構建列表,將佈局好的列表行視圖嵌入其中便可展現出列表界面,以下:ci
struct ListContent:View { var body: some View { List { RowContent(contactModel: modelData[0]) RowContent(contactModel: modelData[1]) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ListContent() } }
此時,預覽效果以下圖所示:開發
在實際開發中,通常我會採用動態的方式來構建列表,經過對數據源的便利,能夠循環生成列表行,示例以下:class
struct ListContent:View { var body: some View { List(modelData, id: \.name) { model in RowContent(contactModel: model) } } }
其中id是一個行標識字段,使用數據源中可以保證惟一的字段來設置便可。
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:805263726