首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从GeometryReader中进行更改时,SwiftUI不会反映对@Binding @State变量所做的更改

在SwiftUI中,GeometryReader是一个用于获取父视图的几何信息的容器视图。当我们在GeometryReader中对@Binding或@State变量进行更改时,SwiftUI不会自动更新视图。

要使SwiftUI能够反映对@Binding或@State变量所做的更改,我们可以使用以下方法之一:

  1. 使用ObservableObject和@Published属性:创建一个ObservableObject类,并在其中使用@Published属性来包装需要观察的变量。然后,在视图中使用@ObservedObject修饰符将ObservableObject实例与视图关联起来。当@Published属性的值发生更改时,SwiftUI会自动更新视图。
  2. 使用onChange修饰符:在视图中使用onChange修饰符,并在其中检测@Binding或@State变量的更改。在onChange闭包中,我们可以手动更新视图或执行其他操作。

下面是一个示例代码,演示了如何使用ObservableObject和@Published属性来实现对GeometryReader中@Binding或@State变量更改的反映:

代码语言:txt
复制
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变量更改的反映。根据具体的应用场景和需求,我们可以使用其他方法来实现相似的效果。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器运维服务:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网服务:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券