我如何向 swiftUI ScrollView 指示内容大小已更改?
How do I indicate to swiftUI ScrollView that content size has changed?
我正在为 macOS 编写一个 swiftUI 应用程序。
考虑这种情况:我有一个包含可调整大小的图像的滚动视图。如果我将 window 的大小调整为小于图像,则滚动视图栏会按预期显示。如果我使用 .scaleEffect(someStateVar) 调整图像大小(通过更改 someStateVar),滚动视图内容不会更新为图像的新大小。
除了将 NSScrollView 包装到 swiftUI 视图之外,我如何向 swiftUI 滚动视图指示内容大小已更改?
显示缩放图像的示例未设置滚动视图的“内容大小”。当您将时钟设置为大于滚动视图时,滚动条不会出现并且您无法滚动。当您尝试滚动时,您会短暂地看到隐藏区域,但视图会跳回原始位置。
import SwiftUI
struct MyImageView: View {
@State var scale: CGFloat = 1
var theImage: some View{
ScrollView([.horizontal, .vertical]){
VStack{
HStack{
Image(systemName: "clock.fill")
.scaleEffect(scale)
}
}
}
}
var body: some View {
theImage
Slider(value: $scale, in: 1...1000)
}
}
struct ContentView: View {
var body: some View {
MyImageView()
}
}
您可以使用 .frame
修饰符明确设置 VStack
的大小。缺点是你必须知道完整的尺寸。
var theImage: some View{
ScrollView([.horizontal, .vertical]){
VStack{
HStack{
Image(systemName: "clock.fill")
.scaleEffect(scale)
}
}
.frame(width: 50 * scale, height: 50 * scale, alignment: .center)
}
}
我正在为 macOS 编写一个 swiftUI 应用程序。
考虑这种情况:我有一个包含可调整大小的图像的滚动视图。如果我将 window 的大小调整为小于图像,则滚动视图栏会按预期显示。如果我使用 .scaleEffect(someStateVar) 调整图像大小(通过更改 someStateVar),滚动视图内容不会更新为图像的新大小。
除了将 NSScrollView 包装到 swiftUI 视图之外,我如何向 swiftUI 滚动视图指示内容大小已更改?
显示缩放图像的示例未设置滚动视图的“内容大小”。当您将时钟设置为大于滚动视图时,滚动条不会出现并且您无法滚动。当您尝试滚动时,您会短暂地看到隐藏区域,但视图会跳回原始位置。
import SwiftUI
struct MyImageView: View {
@State var scale: CGFloat = 1
var theImage: some View{
ScrollView([.horizontal, .vertical]){
VStack{
HStack{
Image(systemName: "clock.fill")
.scaleEffect(scale)
}
}
}
}
var body: some View {
theImage
Slider(value: $scale, in: 1...1000)
}
}
struct ContentView: View {
var body: some View {
MyImageView()
}
}
您可以使用 .frame
修饰符明确设置 VStack
的大小。缺点是你必须知道完整的尺寸。
var theImage: some View{
ScrollView([.horizontal, .vertical]){
VStack{
HStack{
Image(systemName: "clock.fill")
.scaleEffect(scale)
}
}
.frame(width: 50 * scale, height: 50 * scale, alignment: .center)
}
}