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

iOS*_*com 13 swift swiftui

如何在SwiftUI中删除列表的左右填充?我创建的每个列表都有一个单元格的开头和结尾的边界。

我应该添加什么修饰符以删除此内容?

Ava*_*rio 127

它看起来.listRowInsets不适用于 aList中初始化为 的行content

所以这不起作用:

List(items) { item in
    ItemRow(item: item)
        .listRowInsets(EdgeInsets())
}
Run Code Online (Sandbox Code Playgroud)

但这确实:

List {
    ForEach(items) { item in
        ItemRow(item: item)
            .listRowInsets(EdgeInsets())
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 更可取的是下面列出的答案“.listStyle(GroupedListStyle())”,它会导致所有部分和行整齐地缩进。 (3认同)
  • 值得注意的是,列表项还有一个默认的最小高度。如果您的视图小于此数量,您将看到尽管发生了这些变化,但明显的插图仍然存在。考虑:“List”上的“.environment( \.defaultMinListRowHeight, 0 )”。 (3认同)

Tai*_* Le 57

似乎我们可以使用PlainListStyleList用于iOS的14

List {
    Text("Row")
}
.listStyle(PlainListStyle())
Run Code Online (Sandbox Code Playgroud)

  • @Marcus,因为分组是列表的预定义样式,它添加了插图 (5认同)

Moj*_*ini 47

您可以更改列表中的多个间距。查看这张颜色编码的地图并选择适合您需求的地图:

List(1...100, id: \.self) { item in
    Text("\(item)")
        .padding() //  comment to remove PURPLE padding
        .background(Color.yellow)
        // .listRowInsets(EdgeInsets()) //  uncomment to remove BLUE inset
}
// .listStyle(.plain) //  uncomment to remove GREEN inset
// .listStyle(.grouped) //  uncomment to remove RED inset
Run Code Online (Sandbox Code Playgroud)

演示

RTL-演示图像


gna*_*ket 16

使用这个修饰符:

.listRowInsets(EdgeInsets(....))
Run Code Online (Sandbox Code Playgroud)

但是,如文档中所述,插入将应用于列表中的视图。

设置放置在列表中时要应用于视图的插图。(强调我的)

List自身使用此修饰符不会对其内部的视图产生影响。您必须在内部的视图上使用修改List器才能使修改器产生效果。

用法示例:

List {
    Text("test")
        .listRowInsets(EdgeInsets(top: -20, leading: -20, bottom: -20, trailing: -20))
}
Run Code Online (Sandbox Code Playgroud)


小智 13

你应该打电话

.listRowInsets()

对于行,像这样:

List(items) {
            YoursRowView()
                .listRowInsets(EdgeInsets(top: 0, leading: 10, bottom: 0, trailing: 10))
        }
Run Code Online (Sandbox Code Playgroud)


小智 10

.listStyle(GroupedListStyle())
Run Code Online (Sandbox Code Playgroud)

  • 尽管此代码可能会解决问题,但一个好的答案还应该解释该代码的**什么**以及它**如何**提供帮助。 (2认同)

And*_*rew 10

2022 年,Mac 操作系统

如果其他解决方案不起作用(并且目前不适用于 macOS),您可以使用以下针对 macOS 的 hack:

List(selection: $selectedItems) {
    // some content
}
// solution
.padding(EdgeInsets(top: -10, leading: -20, bottom: -10, trailing: -20))
.clipShape(Rectangle())
Run Code Online (Sandbox Code Playgroud)


iOS*_*com 8

修饰符为

.listRowInsets(EdgeInsets(......))
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用。将此应用于列表或行视图不起作用。 (7认同)
  • 它现在称为“listRowInsets”。 (2认同)

ate*_*kov 7

删除填充

iOS 14.2,Xcode 12.2

ScrollView {
    LazyVStack {
        ForEach(viewModel.portfolios) { portfolio in
            PortfolioRow(item: portfolio)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这使您可以完全控制列表(您也可以使用此代码删除分隔符)。List 的当前实现不提供完全控制并包含一些问题。

请注意,这是一个完全不同的 API。这两个ListLazyVStack懒惰的容器,但在对比ListLazyVStack不重用的小区,当行更复杂的看法,这将显著改变性能。

  • 请注意,这是一个完全不同的 API。“List”和“LazyVStack”都是惰性容器,但与“List”相比,“LazyVStack”不重用单元,当行是更复杂的视图时,这将显着改变性能。 (3认同)

Spa*_*Dog 5

上述解决方案没有解决我的问题,因为我的列表有部分。

这为我解决了:

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())
    }
}
Run Code Online (Sandbox Code Playgroud)

在恢复中,您必须重复该部分的命令。