【发布时间】:2020-02-06 00:18:39
【问题描述】:
我正在尝试将多个单元格彼此相邻放置,其中每个单元格由下面的图像和文本组成。单元格本身应该是一个正方形,并且应该缩放图像以填充剩余空间(剪切图像的一部分)。
首先,我尝试将图像制作为正方形,并在下方显示文字。 现在我的问题是,我不知道如何在 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 指定其大小,也无需非方形原件图像被拉伸以使其适合。
因此,完美的解决方案是 VStack 是方形的,但获得方形图像也可以。它应该看起来像图 1,但不必使用 .frame 修饰符。
【问题讨论】: