绑定swiftui中的GeometryReader



如何在childview中绑定GeometryReader的项目?我使用下面的代码,但没有工作?但是它显示

不能调用非函数类型的值'GeometryProxy'

绑定它有什么价值吗?

GeometryReader { geometry in
geometry(geometry: geometry}
}
struct geometry: View {
@Binding var geometry:GeometryProxy
var body: some View {
Circle()
.foregroundColor(.blue).opacity(0.5).blur(radius: 5)
.frame(width: geometry.size.width * 0.04, height: geometry.size.width 
* 0.04)
}

}

为了使解决方案更容易理解,这里是问题的一个最小可重复示例:

struct ContentView: View {
var body: some View {
GeometryReader { geometry in
geometry(geometry: geometry)
}
}
}
struct geometry: View {
@Binding var geometry: GeometryProxy
var body: some View {
Circle()
.foregroundColor(.blue)
.opacity(0.5)
.blur(radius: 5)
.frame(width: geometry.size.width * 0.04, height: geometry.size.width * 0.04)
}
}

有两个主要问题:

  1. 您有两个不同含义的geometry标识符。
  2. 不能将Binding传递给初始化器

# 1

你有geometryGeometryProxy,另一个geometryView。内部的geometry(GeometryProxy)是首选的,因为它在最局部的作用域中。这意味着您不能访问geometry视图。

你可以通过在视图上使用大写字母来解决这个问题,你应该按照惯例这样做(为了避免类似的问题):

struct Geometry: View {
/* ... */
}

# 2

现在您已经解决了第一个问题,现在您将得到错误:

无法将类型'GeometryProxy'的值转换为期望的参数类型'Binding'

通过改变行来解决这个问题:

@Binding var geometry: GeometryProxy

:

let geometry: GeometryProxy

最新更新