调整大小后,SwiftUI图像组件会缩小

时间:2019-06-10 07:17:01

标签: ios swift iphone swiftui

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

var body: some View {
    Image("profilepic")
        .resizable()
        .aspectRatio(contentMode: .fit)
}

在正常情况下,我希望图像可以调整大小并在屏幕上留有很大的空白,因为我将内容模式设置为适合,如果使用填充,它将仅填充整个屏幕。

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

如果您遇到此问题并且知道如何解决,请告诉我。

4 个答案:

答案 0 :(得分:5)

我也有这个问题,看起来像是Beta错误。 我建议保持原样,然后等待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)
    }
}

答案 1 :(得分:0)

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
}

enter image description here enter image description here

答案 2 :(得分:0)

在尝试将图像缩小到列表视图的缩略图时遇到了同样的问题……没有任何效果。在尝试上述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)
            }
        }
    }
}

答案 3 :(得分:0)

这解决了收缩问题

Image(uiImage:self.selectedImage)
.resizable()
.aspectRatio(self.selectedImage.size, contentMode: .fit)