Есть ли способ сделать стиль списка insetGrouped в SwiftUI? - PullRequest
1 голос
/ 15 октября 2019

Итак, скажем, например, что у меня есть список, объявленный так:

List {
    Section {
        Text(“Test Row Title 1”)
    }
    Section {
        Text(“Test Row Title 2”)
    }
}

Можно ли сделать стиль того же, что и UITableView.Style.insetGrouped? Я не могу найти информацию об этом. Я думал, что это будет так же просто, как .listStyle(InsetGroupedStyle())

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Приведенный ниже код может помочь вам и дать вам решение для создания собственного представления. Игра с модификаторами .cornerRadius и .padding:

struct ContentView: View {

var body: some View {

    VStack {

        List {

            Section {
                Text("Test Row Title 1")
            }
            Section {
                Text("Test Row Title 2")
            }
        }.cornerRadius(20)
        .padding()


        List {

            Section {
                Text("Test Row Title 3")
            }
            Section {
                Text("Test Row Title 4")
            }
        }.cornerRadius(20)
            .padding()


    }.background(Color.blue)
  }
}
0 голосов
/ 21 октября 2019

Моя реализация не идеальна, но это то, чем я доволен на данный момент. Я смотрел, создав ViewModifier, CardViewModifier (), который я использую для создания встроенного представления карты. Я использую его в нескольких местах в моем приложении, а не только со списками.

struct CardViewModifier: ViewModifier {

var backgroundColor = Color(.systemBackground)

func body(content: Content) -> some View {
    content
        .padding()
        .frame(maxWidth: .infinity)
        .background(Color(.systemBackground))
        .cornerRadius(12)
        .padding()
    }
}

Чтобы «подделать» insetGrouped List, я конвертирую List в ScrollView, а Sections в VStacks, вот так.

struct ContentView: View {

    let data = ["Row 1", "Row 2", "Row 3", "Row 4", "Row 5"]

    var body: some View {

        ScrollView {

            VStack {
                ForEach(data, id:\.self) { row in
                    VStack {
                        Text("Section 1, \(row)")
                        Divider()
                    }
                }
            }
            .modifier(CardViewModifier())

            VStack {
                ForEach(data, id:\.self) { row in
                    Text("Section 2, \(row)").padding()
                }
            }
            .modifier(CardViewModifier())
        }
        .background(Color(.secondarySystemBackground))
    }
}

Как я уже сказал, это не идеал, но он будет работать, пока Apple (или кто-то еще) не создаст InsetGroupedListStyle. Когда это происходит, это должен быть простой случай, когда ScrollView возвращается к списку, а VS возвращается к разделам.

Удачи ...

...