SwiftUI:如何使图像与列表中的屏幕边缘齐平?

SwiftUI:如何使图像与列表中的屏幕边缘齐平?,swift,swiftui,Swift,Swiftui,我想使列表中的图像与屏幕边缘齐平,但如果向图像添加.listRowInsets(EdgeInsets()),则不会发生任何事情。 如果我向VStack添加相同的代码,列表的格式就会被破坏 List { ForEach(users, id: \.id) { User in VStack(alignment: .leading) { Image(User.image) .resizable()

我想使列表中的图像与屏幕边缘齐平,但如果向图像添加
.listRowInsets(EdgeInsets())
,则不会发生任何事情。 如果我向VStack添加相同的代码,列表的格式就会被破坏

List {
    ForEach(users, id: \.id) { User in
        VStack(alignment: .leading) {
            Image(User.image)
                .resizable()
                .scaledToFill()
            Text(User.name).font(.body)
        }
    }
} .listStyle(GroupedListStyle())

无法看到边到边绘制图像的原因是默认情况下,
列表
应用了填充。有两种可能的方法:

第一个。如果您的用户列表不是很大,您可以将您的
ForEach
放在
ScrollView
中,默认情况下该视图没有应用填充。请注意,对于大型列表,这是非常低效的:

ScrollView {
    ForEach(users, id: \.id) { user in
        VStack(alignment: .leading) {
            Image(user.image)
                .resizable()
                .scaledToFill()
            Text(user.image)
        }
    }
}
第二种方法有点老套。您可以将负片填充应用于
图像
,将其一直延伸到边缘:

List {
    ForEach(users, id: \.id { user in
        VStack(alignment: .leading) {
            Image(user.image)
                .resizable()
                .scaledToFill()
                .padding([.leading, .trailing], -16.0)
            Text(user.name)
        }
    }
}
还值得一提的是,如果您将您的用户类型声明为可识别的:

extension User: Identifiable {}
您将能够以如下更简单的方式声明您的
ForEach

ForEach(users)