web-dev-qa-db-ja.com

Swiftui - ネストされたリスト

私は入れ子になった階層リストを作成しようとしているので、iOSリマインダーアプリのようなサブタスクを持つことができる各タスクの場合:

enter image description here

最初の試みはリストセル内に別のリストを埋め込むことでした。

import SwiftUI

struct SwiftUIView: View {
    var body: some View {

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

            }

        }
    }
}

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

 _

しかし、うまくいきませんでした...

誰もが助けることができますか?

乾杯

5
Mane Manero

なぜリストのリストになるべきだと思いますか...そのような視覚的表現は1つのリストしか使用して生成でき、ネイティブの外観と感触があります。

これは単なるデモ(w/o UIチューニングと表示/非隠しセクション、それがトピック不足)ですが、そのアイデアは明確になるべきです

nested list

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()
    }
}
 _
1
Asperi

それは難しくないが、あなたは手動でいくつかのフレームを追加する必要があります。

        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")
                }
            }
        }
 _
0
E.Coms