SwiftUI中如何让图片填充父视图且不影响布局?
SwiftUI 图片填充容器且保持容器尺寸的原生实现方法?
需求目标
我经常遇到这样的场景:希望按比例缩放图片使其填充容器,但不修改容器的frame。如第一张截图所示,容器视图有固定frame(红色边框标注),图片本身的宽高比不同,需缩放至填满整个容器,且保持与容器相同的frame,不影响容器的布局(尺寸)。
现有解决方案
我使用以下代码实现该需求:
struct ContentView: View { var body: some View { ImageContainerView() .frame(width: 300, height: 140) .border(.red, width: 2) } } struct ImageContainerView: View { var body: some View { GeometryReader { geometry in Image("image") .resizable() .aspectRatio(contentMode: .fill) .border(.blue, width: 2) .frame(width: geometry.size.width, height: geometry.size.height) .clipped() } } }
存在问题
如代码所示,我通过GeometryReader手动将图片的frame设置为匹配父视图的frame。但图片已从父视图隐式接收了proposed size信息,这种方式略显多余。若不如此使用GeometryReader,图片不会被裁剪,其frame会匹配缩放后的完整图片尺寸,而非父视图的frame,如第二张截图所示。
问题问询
在SwiftUI中,是否存在无需使用GeometryReader的更“原生”的方法来实现上述需求?


内容的提问来源于stack exchange,提问作者Mischa
相关产品推荐
相关产品推荐

