如何正确更改 SwiftUI 图像的长宽比?

问题描述 投票:0回答:2

我拼命尝试将图像的长宽比更改为 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/,但实际上是完全相同的结果。

请告诉我您知道如何处理这个问题吗?一个函数?自定义视图?谢谢!

swiftui aspect-ratio
2个回答
1
投票

您应该选择框架中的宽度或高度,但不能同时选择两者,并将宽高比设置为 16/9 :

Button("Button", action: { })
Image("example")
            .resizable()
            .aspectRatio(16/9, contentMode: .fit)
            .frame(width: UIScreen.main.bounds.width - x)
            // .border(Color.red)
            .clipped()

0
投票

这个有效

Color.clear
                            .aspectRatio(16/9, contentMode: .fit)
                            .overlay(
                                image
                                    .resizable()
                                    .scaledToFill()
                            )
                            .clipShape(RoundedRectangle(cornerRadius: 8))
© www.soinside.com 2019 - 2024. All rights reserved.