Изменения заполнения строки списка SwiftUI в зависимости от содержимого Dynami c - PullRequest
1 голос
/ 24 апреля 2020

У меня есть List с ListRows, которые имеют некоторое динамическое c содержимое. У меня есть «верхний ряд» с кнопкой, чтобы развернуть и показать «нижний ряд» - примерно так:

        VStack(alignment: .leading) {
            HStack {
                Text("Test")
                    .font(.headline)
                    .background(Color.green)
                Spacer()
                Button(action: {self.showBody.toggle()},
                       label: {Image(systemName: "icloud.and.arrow.down")})
            }
                .background(Color.yellow)

            if showBody {
                Text("<insert body>")
                    .font(Constants.Fonts.NotesRow.preview)
                    .background(Color.blue)
            }
        }

Вот как это выглядит. Я установил .listRowInsets на 0, но обратите внимание, что сверху и снизу есть отступы (это черные линии выше и ниже цветных линий).

enter image description here

Когда я нажимаю «развернуть», отступы меняются, и это дает довольно неприятный опыт:

enter image description here

Есть ли способ исправить это так что строка расширяется?

Обновление

Похоже, что если я установлю .padding() в строке, я получу правильное поведение. Если я попытаюсь изменить отступ меньше, он будет иметь нежелательное поведение «уменьшения пространства заполнения».

Вот пример того, как он работает, как ожидалось с .padding() - обратите внимание, что серые пространства одинаковы вокруг содержимое строки и полностью заняли строку (ie, черного цвета нет):

enter image description here enter image description here

Если я изменю отступ на .padding(5), вы увидите, что строка не занимает всю строку, и появляется черный цвет из строки. При расширении поглощает черных, что делает опыт нежелательным:

enter image description here enter image description here

1 Ответ

0 голосов
/ 24 апреля 2020

Решение может быть следующим (paddings, et c. Конечно настраиваются, просто направление, показывающее, что контент может заполнить строку полностью, если это необходимо)

demo

struct ListRow: View {
    @State private var showBody = false

    var body: some View {
        VStack(alignment: .leading) {
            HStack {
                Text("Test")
                    .font(.headline)
                    .background(Color.green)
                Spacer()
                Button(action: {self.showBody.toggle()},
                       label: {Image(systemName: "icloud.and.arrow.down")})
            }
            .background(Color.yellow)

            if showBody {
                Text("<insert body>")
                    .font(.subheadline)
                    .background(Color.blue)
            }
            Spacer()
        }
        .listRowInsets(EdgeInsets())
        .listRowBackground(Color.yellow)
    }
}

struct ContentView: View {
    var body: some View {
        List {
            ForEach (0 ..< 2) { _ in
                ListRow()
            }
        }
        .environment(\.defaultMinListRowHeight, 20)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...