删除列表(SwiftUI)中的黑色填充

时间:2020-04-21 07:53:33

标签: swift list listview swiftui padding

这是我的列表的代码:

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 个答案:

答案 0 :(得分:1)

也许您正在寻找.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))
}

答案 1 :(得分:0)

您应该为此更改.listRowBackground()