删除列表中的黑色填充(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)的主要内容,如果未能解决你的问题,请参考以下文章