Удалить черные отступы в списке (SwiftUI) - PullRequest
1 голос
/ 21 апреля 2020

Это код моего списка:

import SwiftUI

struct PaymentScreen: View {

    init() {
        UITableView.appearance().separatorStyle = .none
        UITableViewCell.appearance().backgroundColor = .black // I can change color of this paddings here
    }

    var body: some View {
        return VStack (alignment: .center) {
            List (Terminal.terminals, id: \.self.distance) { terminal in
                PayTerminalAdapter(terminal: terminal).background(Color.white)
            }
        }
    }
}

Скриншот моего списка:

enter image description here

Я не могу удалить черные начальные и конечные отступы и отступы между элементами списка. Когда я использую ForEach (у меня очень длинный массив терминалов) - у меня нет проблем с заполнением, но он работает так медленно, поэтому ForEach - плохой выбор для меня. Как я могу удалить черные отступы в списке?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Возможно, вы ищете модификатор .listRowInsets.

Решение:

List {
    ForEach(Terminal.terminals, id: \.self.distance) {
        PayTerminalAdapter(terminal: terminal).background(Color.white)
    }
    .listRowInsets(EdgeInsets(top: 1, leading: 2, bottom: 1, trailing: 2))
}

Выше вы, возможно, заметили, что List(data:) теперь просто List(content:), и данные перемещаются в ForEach(data:id:).
Я не уверен, есть ли ошибка SwiftUI, но .listRowInsets работает только для отдельных элементов. Этот единственный элемент может иметь несколько элементов, и его можно использовать повторно, поэтому не стоит беспокоиться.
Однако, как тест, даже если выглядит следующее, как будто он должен работать, он не работает:

Пример (не работает):

List(0...100, id: \.self) { _ in
    Text("Custom row inset not being applied")
        .frame(maxWidth: .infinity, maxHeight: .infinity)
        .background(Color.gray)
        .listRowInsets(EdgeInsets(top: 1, leading: 2, bottom: 1, trailing: 2))
}

Итак, поместите ваш источник данных в ForEach и примените к нему .listRowInsets.

Пример (рабочий):

List {
    ForEach(0...100, id: \.self) { _ in
        Text("Custom row inset being applied")
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(Color.gray)
    }
    .listRowInsets(EdgeInsets(top: 1, leading: 2, bottom: 1, trailing: 2))
}
0 голосов
/ 21 апреля 2020

Вы должны изменить .listRowBackground() для этого.

...