SwiftUI:动态设置图像大小

时间:2019-07-02 06:59:41

标签: ios swift swiftui

我想在视图中显示图像,其中图像源的大小会有所不同。 有没有一种方法可以动态地将图像的大小调整为包含视图的宽度,甚至获得屏幕的大小? 我有一个水平的scrollview,每个元素都是图像和文本的堆栈。我想根据屏幕宽度调整每个图像的大小,因为我想独立于设备。 您将如何在SwiftUI中做到这一点? 谢谢!

struct ImageRow: View {
    var items: [ImageWithDescription]

    var body: some View {

        ScrollView(showsHorizontalIndicator: false) {
                HStack(alignment: .bottom){

                    ForEach(self.items.identified(by: \.name)) { item in
                       Spacer()
                        VStack {
                        Image(uiImage: item.image ?? UIImage())
                            .resizable()
                            .frame(minWidth: (item.image.size.width) / 3, height: (item.image.size.height) / 3)
                            .cornerRadius(20, antialiased: true)
                            .clipShape(Rectangle())
                            .shadow(radius: 10)

                        Text(item.name)
                        .color(.primary)
                        .font(.subheadline)

                        }
                    }
                    .padding()
                }
                }
                .frame(height: 300)

    }
}

1 个答案:

答案 0 :(得分:0)

您可以获取屏幕(或窗口,如果您使用带分屏的iPad)的大小。

在下面的示例中,顶视图使用GeometryReader来获取大小并将其向下传递到层次结构中。子视图使用该数据来创建一个蓝色矩形,其大小为屏幕的一半。如果设备旋转,它也会适应。

GeometryReader具有许多功能,尽管几乎没有记录,但是我写了一篇文章,全面解释了如何使用它们:https://swiftui-lab.com/geometryreader-to-the-rescue/

struct ContentView: View {

    var body: some View {

        GeometryReader { geometry in
            MySubview(size: geometry.size)
        }

    }
}

struct MySubview: View {
    let size: CGSize

    var body: some View {
        print("size = \(size)")
        return Color.blue.frame(width: size.width / 2, height: size.height / 2).fixedSize()
    }
}