【发布时间】:2019-10-30 00:43:36
【问题描述】:
SwiftUI中如何去掉List的左右Padding? 我创建的每个列表都有单元格前导和尾随的边框。
我应该添加什么修饰符来删除它?
【问题讨论】:
SwiftUI中如何去掉List的左右Padding? 我创建的每个列表都有单元格前导和尾随的边框。
我应该添加什么修饰符来删除它?
【问题讨论】:
看起来.listRowInsets 不适用于使用content 初始化的List 中的行。
所以这不起作用:
List(items) { item in
ItemRow(item: item)
.listRowInsets(EdgeInsets())
}
但这确实:
List {
ForEach(items) { item in
ItemRow(item: item)
.listRowInsets(EdgeInsets())
}
}
【讨论】:
.listStyle(GroupedListStyle()),它会导致所有 Section 和 Rows 整齐地缩进。
.environment( \.defaultMinListRowHeight, 0 ) 在List 上。
看来我们可以将PlainListStyle 用于List 用于iOS 14
List {
Text("Row")
}
.listStyle(PlainListStyle())
【讨论】:
使用这个修饰符:
.listRowInsets(EdgeInsets(....))
但是,正如documentation 中所述,插入将应用于视图在列表中时。
设置插入列表时应用到视图。 (强调我的)
在List 本身上使用此修饰符不会对其内部的视图产生影响。您必须在 List 内的 view 上使用修饰符才能使修饰符生效。
示例用法:
List {
Text("test")
.listRowInsets(EdgeInsets(top: -20, leading: -20, bottom: -20, trailing: -20))
}
【讨论】:
List 本身使用修饰符,但它不会对列表的项目产生任何影响。如文档所述,您需要将修饰符应用于 列表内 的视图。我已经更新了我的答案以更清楚。
修饰符是
.listRowInsets(EdgeInsets(......))
【讨论】:
删除填充
iOS 14.2、Xcode 12.2
ScrollView {
LazyVStack {
ForEach(viewModel.portfolios) { portfolio in
PortfolioRow(item: portfolio)
}
}
}
这使您可以完全控制列表(您也可以使用此代码删除分隔符)。 List 的当前实现不提供完全控制并且包含一些问题。
注意这是一个完全不同的 API。 List 和 LazyVStack 都是惰性容器,但与 List 相比,LazyVStack 不重用单元格,当行是更复杂的视图时,这将显着改变性能。
【讨论】:
.listStyle(...) 和.listRowInsets(...) 建议,并且都没有删除前导空格
List 和 LazyVStack 都是惰性容器,但与 List 相比,LazyVStack 不重用单元格,当行是更复杂的视图时,这将显着改变性能。
.listStyle(GroupedListStyle())
【讨论】:
.listRowInsets() 方法?与以前的方法相比,它有什么优势吗?
你应该打电话
.listRowInsets()
对于行,像这样:
List(items) {
YoursRowView()
.listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
}
【讨论】:
上述解决方案没有解决我的问题,因为我的列表有部分。
这为我解决了:
List {
ForEach(years, id:\.self) { year in
Section(header: SectionHeader(year)) {
VStack(alignment:.leading) {
ForEach(cars[year]!, id:\.self) { car in
ListItem(car)
.frame(width: UIScreen.main.bounds.size.width,
alignment: .center)
.listRowInsets(.init())
}
}
}
.frame(width: UIScreen.main.bounds.size.width,
alignment: .center)
.listRowInsets(.init())
.listStyle(GroupedListStyle())
}
}
在简历中,您必须重复该部分的命令。
【讨论】: