Как в SwiftUI масштабировать контент внутри scrollView с динамически изменяющейся областью прокрутки?

Я разрабатываю приложение для MacOS с помощью SwiftUI.

Допустим, у нас есть окно фиксированного размера, в котором будет отображаться прокручиваемое изображение. Теперь я хочу создать функцию, которая позволяет пользователю масштабировать изображение, а также прокручивать и просматривать масштабированное изображение внутри окна.

Проблема в том, что после того, как я увеличил изображение, область прокрутки кажется не растянутой вместе, а область прокрутки недостаточно велика, чтобы охватить каждый угол изображения.

      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

Спасибо!

1 ответ

.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))
        }
    }
}

Другие вопросы по тегам