Как в 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))
}
}
}