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

Posted

技术标签:

【中文标题】删除列表中的黑色填充(SwiftUI)【英文标题】:Remove black paddings in List (SwiftUI) 【发布时间】:2020-04-21 07:53:33 【问题描述】:

这是我列表的代码:

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)
            
        
    

我的列表截图:

我无法删除列表元素之间的黑色前导和尾随填充以及填充。当我使用 ForEach 时(我有很长的终端阵列) - 我没有填充问题,但它的工作速度很慢,因此 ForEach 对我来说是一个糟糕的选择。如何删除列表中的黑色填充?

【问题讨论】:

【参考方案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))

【讨论】:

好!有用!但无论如何有趣,为什么 .listRowInsets() 不起作用,当我只使用 List 而没有 ForEach 时? @alexbayker 我不确定,这可能是List(data:id:) 内部工作方式的错误。如果我弄清楚了,我会更新这个答案。如果这个答案有帮助,请接受它:)【参考方案2】:

您应该为此更改.listRowBackground()

【讨论】:

是的,我知道 .listRowBackground()。这并不容易。 那是什么问题?告诉我,我看看能不能帮你更多 UITableViewCell.appearance().backgroundColor = .white - 我改变了这个填充的颜色,但不能删除它 看看this answer 我知道改变这个填充的颜色,但我想删除它

以上是关于删除列表中的黑色填充(SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中删除列表的左右填充?

如何用黑色填充灰色空间? SwiftUI

SwiftUI 中的 List 是不是复用类似于 UITableView 的单元格?

如何删除swiftUI列表上的切换下拉列表

恢复列表 SwiftUI 中的底部填充

隐藏 SwiftUI DisclosureGroup 箭头并删除默认填充