我正在试图将多个单元格并排放置,其中每个单元格包含一张图像和在其下方的文本。单元格本身应该是一个正方形,图像应该缩放以填充剩余的空间(裁剪图像的一部分)。
首先,我尝试过只制作图像为正方形,然后再加上下方的文本。现在我的问题是,我不知道如何在SwiftUI中正确地实现它。当使用这段代码时,我可以使其正常工作:
VStack {
Image(uiImage: recipe.image!)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 200, height: 200, alignment: .center)
.clipped()
Text(recipe.name)
}
问题是我必须指定一个固定的框架大小。我想要的是一种方式,可以制作一个保持1:1纵横比且可调整大小的单元格,以便我可以在屏幕上放置动态数量的它们并排显示。
我也尝试过使用
VStack {
Image(uiImage: recipe.image!)
.resizable()
.aspectRatio(1.0, contentMode: .fit)
.clipped()
Text(recipe.name)
}
这会给我提供正方形的图片,可以动态缩放。但问题是,图像现在被拉伸以填充正方形而不是按比例缩放以填充它。
我的下一个想法是将其剪裁成正方形。为此,我首先尝试将其剪裁为圆形(因为显然没有正方形形状):
VStack {
Image(uiImage: recipe.image!)
.resizable()
.aspectRatio(contentMode: .fit)
.clipShape(Circle())
Text(recipe.name)
}
但出于某种奇怪的原因,它并没有真正地裁剪图片,而是保留了其余的空间...
所以是我没有看到什么还是唯一的选择是使用 frame 修改器将图像裁剪成正方形?
编辑
为了澄清: 我不太关心文本, 而是想让整个单元格 (或如果更简单, 只有图像) 是正方形, 而无需通过 .frame
指定其大小, 也无需对非正方形的原始图像进行拉伸以使其适合。
所以完美的解决方案应该是 VStack 是正方形, 但获取正方形的图像也可以。它应该看起来像 Image 1,但不需要使用 .frame
修饰符。
clipped()
,但似乎并不重要。此外,如果您为图像的框架添加height: proxy.size.height
参数,则图像将在垂直方向上居中。 - iComputerfreak