Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SwiftUI图像组件在调整大小时收缩_Ios_Swift_Iphone_Swiftui - Fatal编程技术网

Ios SwiftUI图像组件在调整大小时收缩

Ios SwiftUI图像组件在调整大小时收缩,ios,swift,iphone,swiftui,Ios,Swift,Iphone,Swiftui,我一直在测试SwiftUI,我想你们大多数人也在测试。我遇到了一个奇怪的问题,很可能是一个bug,但也许其他人已经找到了解决方法 var body: some View { Image("profilepic") .resizable() .aspectRatio(contentMode: .fit) } 在正常情况下,我希望图像能够调整大小并在屏幕上留有较大的空白,因为我将内容模式设置为适合,如果我使用填充,它将填充整个屏幕 拟合效果很好,但图像没有保

我一直在测试SwiftUI,我想你们大多数人也在测试。我遇到了一个奇怪的问题,很可能是一个bug,但也许其他人已经找到了解决方法

var body: some View {
    Image("profilepic")
        .resizable()
        .aspectRatio(contentMode: .fit)
}
在正常情况下,我希望图像能够调整大小并在屏幕上留有较大的空白,因为我将内容模式设置为适合,如果我使用填充,它将填充整个屏幕

拟合效果很好,但图像没有保持纵横比,而是缩小了


如果您遇到此问题并知道如何修复,请告诉我。

我也遇到此问题,看起来这是测试版错误。 我建议保持原样,等待苹果的修复

如果您确实需要正确的图像,可以为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)
    }
}

尝试将图像缩小为列表视图的缩略图时遇到了相同的问题。。。什么都没用。我在尝试上面Lex建议的修复时也遇到了错误。所以我修改了它。。。扩展视图协议,具有计算和返回图像纵横比的功能

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)

Duuude,我有一个懒散加载UIImage的方法,我不知道为什么我没有想到为UIImageView做这个,这是一个很好的解决方法。但如果视图更复杂,则会出现错误“包含声明的闭包不能与函数生成器‘ViewBuilder’一起使用”。因此,您需要计算飞行中的纵横比(无变量)@DenFav您能提供您描述的复杂视图的代码示例吗?无法将其发送到私人聊天室somewhy var body:someview{let size=UIImage(name:car.imageName)!.size let aspect=size.width/size.height ZStack(对齐:.topLeading){Image(car.imageName).resizable().aspectRatio(aspect,contentMode:.fill).边框(宽:200,高:200,对齐:.center).剪贴画(圆()).shadow(半径:10)}@DenFav您希望将此图像左上角对齐,右上角对齐?如何?如果忽略对齐,请使用间隔符操纵图像的位置parameters@DenFav顺便说一句,如果你在你的例子中将图像改为文本,没有任何改变,它仍然会垂直和水平居中,所以可能这不是图像问题,而是视图的结构在我的例子中,default image us未收缩,但在image()中更改图像是收缩图像的结果。现在它可用于此纵横比计算,谢谢。
Image(uiImage:self.selectedImage)
.resizable()
.aspectRatio(self.selectedImage.size, contentMode: .fit)