我想让列表中的图像与屏幕边缘齐平,但如果添加.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())
Run Code Online (Sandbox Code Playgroud)
您看不到图像边缘到边缘绘制的原因是因为List
默认情况下应用了填充。有两种可能的方法:
第一。如果您的用户列表不是很大,您可以将您的ForEach
内部放置在ScrollView
默认情况下不应用填充的a中。请注意,对于大型列表,它的效率非常低:
ScrollView {
ForEach(users, id: \.id) { user in
VStack(alignment: .leading) {
Image(user.image)
.resizable()
.scaledToFill()
Text(user.image)
}
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方法有点hacky。您可以对您应用负填充以将其Image
一直扩展到边缘:
List {
ForEach(users, id: \.id { user in
VStack(alignment: .leading) {
Image(user.image)
.resizable()
.scaledToFill()
.padding([.leading, .trailing], -16.0)
Text(user.name)
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外值得一提的是,如果您将 User 类型声明为Identifiable
:
extension User: Identifiable {}
Run Code Online (Sandbox Code Playgroud)
您将能够以ForEach
更简单的方式声明您的,如下所示:
ForEach(users)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
628 次 |
最近记录: |