xcode SwiftUI:listRowInsets未按预期工作

oogrdqng  于 2023-04-13  发布在  Swift
关注(0)|答案(3)|浏览(211)

使用List()List(Data,id)时,listRowInsets(_:)无法正常工作。在下面的 Example 1 中,它可以完美地使用零插入,而在 Example 2 中,它什么也不做。

示例一:

struct ContentView: View {
    var body: some View {
        List {
            Color.red
                .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
            Color.blue
                .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
            Color.yellow
                .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
        }
    }
}
  • 结果:*

示例二

struct ContentView: View {
    var colors: [Color] = [.red, .blue, .yellow]
    var body: some View {
        List(colors, id: \.self) { color in
            color.listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
        }
    }
}
  • 结果:*

3htmauhk

3htmauhk1#

我假设原因是使用了构造函数。.listRowInsets by documentation影响视图被放置在List中(直接)。
以下作品

var colors: [Color] = [.red, .blue, .yellow]
var body: some View {
    List {
        ForEach(colors, id: \.self) { color in
            color.listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0))
        }
    }
}
mdfafbf1

mdfafbf12#

除了Asperi的答案之外,如果您有节,则需要将listRowInsets视图修饰符应用于节,否则设置也将被忽略。

laximzn5

laximzn53#

这不是你的情况下的解决方案,但这是一个非常相似的地雷,所以我想我会张贴在这里也为其他人。
我也有类似的问题:我设置了.listRowInsets(EdgeInsets()),但在某些情况下,内容周围仍然有垂直间距。显然SwiftUI为列表行设置了最小高度,如果内容占用的空间较小,则可能会看到一些间隙。解决方案是删除此最小高度:

List {
  ...
}
.environment(\.defaultMinListRowHeight, 0)

相关问题