我拼命尝试将图像的长宽比更改为 16:9,而不拉伸它。
.aspectRatio(16/9, contentMode: .fill or .fit)
不可用,因为它纯粹是垃圾(地球上没有人愿意拉伸图像)。此外,CGFloat
或 CGSize
之间没有区别。
所以我首先尝试了这样的事情:
Button("Button", action: { })
Image("example")
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: UIScreen.main.bounds.width - x, height: (UIScreen.main.bounds.width - x) * 0.5625)
// .border(Color.red)
.clipped()
看起来是对的,但实际上完全不对,图像的隐藏部分超出了按钮。奇怪的是,该按钮是可见的,但当然不可用。如果您取消注释
.border(Color.red)
并评论.clipped()
,您可以自己看到这一点。
然后,我尝试了以下两种解决方案:https://alejandromp.com/blog/image-aspectratio-without-frames/,但实际上是完全相同的结果。
请告诉我您知道如何处理这个问题吗?一个函数?自定义视图?谢谢!
您应该选择框架中的宽度或高度,但不能同时选择两者,并将宽高比设置为 16/9 :
Button("Button", action: { })
Image("example")
.resizable()
.aspectRatio(16/9, contentMode: .fit)
.frame(width: UIScreen.main.bounds.width - x)
// .border(Color.red)
.clipped()
这个有效
Color.clear
.aspectRatio(16/9, contentMode: .fit)
.overlay(
image
.resizable()
.scaledToFill()
)
.clipShape(RoundedRectangle(cornerRadius: 8))