在 SwiftUI 中,如何使用动态变化的滚动区域缩放 scrollView 内的内容?

问题描述

我正在使用 SwiftUI 开发 MacOS 应用程序。

假设我们有一个固定大小的窗口,它将显示一个可滚动的图像。 现在我想创建一个功能,可以让用户缩放图像,并且可以在窗口内滚动和查看缩放的图像。

问题是,一旦我放大图像,滚动区域似乎没有一起展开,并且滚动区域不够大,无法到达图像的每个角落。

struct ContentView: View {
    var body: some View {
        ScrollView([.horizontal,.vertical],showsIndicators: true ){
            Image("test")
                .scaleEffect(2)
        }
        .frame(width: 500,height: 500)
    }
}

我尝试使用 GeometryReader 设置图像的框架,但得到了相同的结果。

MacOS 11.1,Xcode 12.3

谢谢!

解决方法

.scaleEffect 似乎对视图执行了视觉变换,而实际上并不影响其框架,因此 ScrollView 不知道适应更大的尺寸。

图像上的

.resizable().frame 似乎可以解决问题:

struct ContentView: View {
    @State private var scale : CGFloat = 1.0
    
    var body: some View {
        VStack {
            ScrollView([.horizontal,.vertical],showsIndicators: true ){
                Image(systemName: "plus.circle")
                    .resizable()
                    .frame(width: 300 * scale,height: 300 * scale)
            }
            .frame(width: 500,height: 500)
            Slider(value: $scale,in: (0...5))
        }
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...