SwiftUI 图像组件在调整大小时缩小
SwiftUI Image component shrinks when resized
我一直在测试 SwiftUI,我想你们中的大多数人也测试过。我遇到了一个奇怪的问题,很可能是一个错误,但也许其他人已经找到了解决方法。
var body: some View {
Image("profilepic")
.resizable()
.aspectRatio(contentMode: .fit)
}
在正常情况下,我希望调整图像大小并在屏幕上留出较大的边距,因为我将内容模式设置为适合,如果我使用填充,它只会填满整个屏幕。
拟合效果很好,但图像没有保持纵横比,它缩小了。
如果您遇到此问题并且知道如何解决它,请告诉我。
我也有这个问题,看起来这是测试版错误。
我建议保持原样,等待 Apple 修复。
如果您真的需要正确的图像,您可以为 SwiftUI 创建自定义视图结构
struct FixedImage: UIViewRepresentable {
var imageName: String
func makeUIView(context: Context) -> UIImageView {
let imageView = UIImageView(image: UIImage(named: imageName))
imageView.contentMode = .scaleAspectFit
return imageView
}
func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.image = UIImage(named: imageName)
}
}
public var body: some View {
let size = UIImage(named: "at")!.size
let aspect = size.width / size.height
let img = Image("at")
.resizable()
.aspectRatio(aspect, contentMode: .fill)
.frame(width: 200, height: 200, alignment: .center)
.clipShape(Circle())
.shadow(radius: 10)
return img
}
尝试将图像缩小为列表视图的缩略图时遇到同样的问题...没有任何效果。我在尝试上面 Lex 的建议修复时也遇到了错误。所以我修改了它......扩展视图协议具有计算和return图像纵横比的功能......
extension View {
func calcImageAspectRatio(_ imageName: String) -> Length?
{
if let image = UIImage(named: imageName) {
let size = image.size
return size.width / size.height
}
return nil
}
}
extension ExerciseList {
struct ExerciseCell : View {
let exercise: Exercise
var body: some View {
HStack {
Image(exercise.visuals)
.resizable()
.aspectRatio(calcImageAspectRatio(exercise.visuals), contentMode: .fit)
.frame(width: 100, height: 100, alignment: .center)
Text(exercise.title)
}
}
}
}
这解决了收缩问题
Image(uiImage:self.selectedImage)
.resizable()
.aspectRatio(self.selectedImage.size, contentMode: .fit)
我一直在测试 SwiftUI,我想你们中的大多数人也测试过。我遇到了一个奇怪的问题,很可能是一个错误,但也许其他人已经找到了解决方法。
var body: some View {
Image("profilepic")
.resizable()
.aspectRatio(contentMode: .fit)
}
在正常情况下,我希望调整图像大小并在屏幕上留出较大的边距,因为我将内容模式设置为适合,如果我使用填充,它只会填满整个屏幕。
拟合效果很好,但图像没有保持纵横比,它缩小了。
如果您遇到此问题并且知道如何解决它,请告诉我。
我也有这个问题,看起来这是测试版错误。 我建议保持原样,等待 Apple 修复。
如果您真的需要正确的图像,您可以为 SwiftUI 创建自定义视图结构
struct FixedImage: UIViewRepresentable {
var imageName: String
func makeUIView(context: Context) -> UIImageView {
let imageView = UIImageView(image: UIImage(named: imageName))
imageView.contentMode = .scaleAspectFit
return imageView
}
func updateUIView(_ uiView: UIImageView, context: Context) {
uiView.image = UIImage(named: imageName)
}
}
public var body: some View {
let size = UIImage(named: "at")!.size
let aspect = size.width / size.height
let img = Image("at")
.resizable()
.aspectRatio(aspect, contentMode: .fill)
.frame(width: 200, height: 200, alignment: .center)
.clipShape(Circle())
.shadow(radius: 10)
return img
}
尝试将图像缩小为列表视图的缩略图时遇到同样的问题...没有任何效果。我在尝试上面 Lex 的建议修复时也遇到了错误。所以我修改了它......扩展视图协议具有计算和return图像纵横比的功能......
extension View {
func calcImageAspectRatio(_ imageName: String) -> Length?
{
if let image = UIImage(named: imageName) {
let size = image.size
return size.width / size.height
}
return nil
}
}
extension ExerciseList {
struct ExerciseCell : View {
let exercise: Exercise
var body: some View {
HStack {
Image(exercise.visuals)
.resizable()
.aspectRatio(calcImageAspectRatio(exercise.visuals), contentMode: .fit)
.frame(width: 100, height: 100, alignment: .center)
Text(exercise.title)
}
}
}
}
这解决了收缩问题
Image(uiImage:self.selectedImage)
.resizable()
.aspectRatio(self.selectedImage.size, contentMode: .fit)