SwiftUI Image scaledToFill 布局行为
SwiftUI Image scaledToFill layout behaviour
在我的 iOS 14 Widget 中,我想连续显示几个圆形图像。
使用 scaledToFit()
时,图像会奇怪地拉伸以适合圆圈。 scaledToFill()
像这样给我想要的输出:
Image("Person")
.resizable()
.scaledToFill()
.clipShape(Circle())
但这会改变视图的行为以忽略它的父级并扩展到它之外。设置固定框架可以防止这种情况,但我需要这些图像动态调整大小。当我将这个视图放在我的小部件的 HStack
中时,图像太大了。
如何让图像像 scaledToFill()
一样缩放并且仍然尊重父视图。
您可以尝试使用几何 reader。这是我在 Widget 中使用的示例代码,因此您必须根据您的项目对其进行调整,但是,您会明白的。
GeometryReader { geo in
ZStack(alignment: .bottom) {
HStack {
Image("Person")
.resizable()
.frame(width: geo.size.width, height: geo.size.height)
.aspectRatio(contentMode: .fit)
}
}
}
我在这个 post 中找到了解决方案,第一个答案在 Widget 中效果很好:
但是我在我的应用程序中重用了该视图,它在那里导致了一些奇怪的行为。相反,我现在在创建视图之前将图像剪裁成一个圆圈。这允许我使用 .scaledToFit()
并仍然保持图像的原始纵横比。
我发现将 GeometryReader 直接包装到图像中效果最好
HStack {
GeometryReader { geo in
Image("Person")
.resizable()
.scaledToFill()
.frame(width: geo.size.width, height: geo.size.height)
}
}
在我的 iOS 14 Widget 中,我想连续显示几个圆形图像。
使用 scaledToFit()
时,图像会奇怪地拉伸以适合圆圈。 scaledToFill()
像这样给我想要的输出:
Image("Person")
.resizable()
.scaledToFill()
.clipShape(Circle())
但这会改变视图的行为以忽略它的父级并扩展到它之外。设置固定框架可以防止这种情况,但我需要这些图像动态调整大小。当我将这个视图放在我的小部件的 HStack
中时,图像太大了。
如何让图像像 scaledToFill()
一样缩放并且仍然尊重父视图。
您可以尝试使用几何 reader。这是我在 Widget 中使用的示例代码,因此您必须根据您的项目对其进行调整,但是,您会明白的。
GeometryReader { geo in
ZStack(alignment: .bottom) {
HStack {
Image("Person")
.resizable()
.frame(width: geo.size.width, height: geo.size.height)
.aspectRatio(contentMode: .fit)
}
}
}
我在这个 post 中找到了解决方案,第一个答案在 Widget 中效果很好:
但是我在我的应用程序中重用了该视图,它在那里导致了一些奇怪的行为。相反,我现在在创建视图之前将图像剪裁成一个圆圈。这允许我使用 .scaledToFit()
并仍然保持图像的原始纵横比。
我发现将 GeometryReader 直接包装到图像中效果最好
HStack {
GeometryReader { geo in
Image("Person")
.resizable()
.scaledToFill()
.frame(width: geo.size.width, height: geo.size.height)
}
}