8

我正在尝试创建一个嵌套的分层列表,以便对于每个任务我都可以拥有像 iOS 提醒应用程序中的子任务:

在此处输入图像描述

第一次尝试是在列表单元格中嵌入另一个列表。

import SwiftUI

struct SwiftUIView: View {
    var body: some View {

        List {
            List {
              Text("Hello, World!")

            }

        }
    }
}

struct SwiftUIView_Previews: PreviewProvider {
    static var previews: some View {
        SwiftUIView()
    }

但是,没有成功...

任何人都可以帮忙吗?

干杯

4

3 回答 3

8

为什么你认为它应该是 List in List... 这样的视觉表示可以仅使用一个列表生成,并且具有原生的外观和感觉。

这只是一个演示(没有 UI 调整和显示/隐藏部分的逻辑,这超出了主题),但想法应该很清楚

嵌套列表

import SwiftUI

struct ItemRow: View {
    let category: Bool
    let text: String

    init(_ text: String, isCategory: Bool = false) {
        self.category = isCategory
        self.text = text
    }

    var body: some View {
        HStack {
            Circle().stroke() // this can be custom control
                .frame(width: 20, height: 20)
                .onTapGesture {
                    // handle tap here
                }
            if category {
                Text(self.text).bold()
            } else {
                Text(self.text)
            }
        }
    }
}

struct TestNestedLists: View {
    var body: some View {
        List { // next pattern easily wrapped with ForEach
            ItemRow("Category", isCategory: true) // this can be section's header
            Section {
                ItemRow("Item 1")
                ItemRow("Item 2")
                ItemRow("Item 3")
            }.padding(.leading, 20)
        }
    }
}

struct TestNestedLists_Previews: PreviewProvider {
    static var previews: some View {
        TestNestedLists()
    }
}
于 2019-11-15T19:44:37.080 回答
0

这并不难,但您必须手动添加一些框架。

        struct SwiftUIViewList: View {
            var body: some View {
                    List {
                      Text("Hello, World!")
                      Text("Hello, World!")
                }
            }
        }

        struct SwiftUIView: View {
            var body: some View {

                List {

                   Text("item1")
                    SwiftUIViewList().frame(height: 100)
                   Text("item3")
                }
            }
        }
于 2019-11-15T18:58:21.423 回答
0

将一个列表放在另一个列表中,就像这个小例子:

struct ContentView: View {
    var body: some View {
        List {
            Text("External List")
            List {
                Text("Internal List")
            }
        }
    }
}

结果是: 结果错误

我正在测试,发现当内部列表的样式是任何分组样式(.grouped、.insetGrouped 或新的.sidebar)时会发生错误。

相反,如果内部列表具有任何未分组的样式(.inset 或 .plain),则它可以正常工作。

struct ContentView: View {
    var body: some View {
        List {
            Text("External List")
            List {
                Text("Internal List")
            }
            .listStyle(.plain)
        }
    }
}

结果是: 结果OK

除此之外,正如许多地方所提到的,您不应该使用嵌套列表。您应该尝试使用 VStack 或 ForEach 解决。

于 2021-12-04T13:01:59.443 回答