在SwiftUI中,GeometryReader是一个用于获取父视图的几何信息的容器视图。当我们在GeometryReader中对@Binding或@State变量进行更改时,SwiftUI不会自动更新视图。
要使SwiftUI能够反映对@Binding或@State变量所做的更改,我们可以使用以下方法之一:
下面是一个示例代码,演示了如何使用ObservableObject和@Published属性来实现对GeometryReader中@Binding或@State变量更改的反映:
import SwiftUI
class ViewModel: ObservableObject {
@Published var value: CGFloat = 0.0
}
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
GeometryReader { geometry in
Rectangle()
.frame(width: geometry.size.width * self.viewModel.value, height: 100)
.foregroundColor(.blue)
}
.frame(height: 100)
Slider(value: $viewModel.value, in: 0...1)
.padding()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
在上面的示例中,我们创建了一个名为ViewModel的ObservableObject类,并在其中使用@Published属性包装了value变量。在ContentView中,我们使用@ObservedObject修饰符将ViewModel实例与视图关联起来。当Slider的值发生更改时,GeometryReader中的Rectangle的宽度将自动更新。
这是一个简单的示例,展示了如何在SwiftUI中实现对GeometryReader中@Binding或@State变量更改的反映。根据具体的应用场景和需求,我们可以使用其他方法来实现相似的效果。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云