需求
大致效果如下图:
- 黑框为选中的一个section,红框为选中的一个应用,可以有多个section,每个section中又可以有多个应用;
- 每个section中的应用由本地应用列表+远端下发应用列表共同组成,远端下发的应用可以再本地应用之前也可以在本地应用之后,这由远端配置动态决定;
- 远端下发的应用列表要有缓存,当打卡首页时首先加载缓存,然后再延迟拉取远端新的应用列表;
- 应用的icon图片、文字、背景适配暗黑模式。
注:应用图标或文字没有链接跳转,只是单纯的图片和文字。
布局大致设计
我计划将同一个section的应用放在一个水平的ScrollView中,类似于TapTap的形式:
(随便截的)
核心代码
设计的传入界面的应用列表为一个二维数组;同行应用拥有相同的section,通过ForEach的嵌套实现展示。
struct ContentView: View {
var body: some View {
VStack(alignment: .leading)
{
Text("App Center")
ScrollView(Axis.Set.vertical)
{
ForEach(0 ..< 5)
{
row in
Text("List\(row + 1)")
.frame(width: UIScreen.main.bounds.width - 10, height: 20, alignment: .leading)
ScrollView(Axis.Set.horizontal) {
HStack {
ForEach(0 ..< 20)
{
i in
Text("\(i)")
}
}
}
}
}
}
}
}
结果如下图:
大致布局设计完毕;接下来把数字替换成应用图片和名称即可。