如何在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)
}
}
有两个主要问题:
- 您有两个不同含义的
geometry
标识符。 - 不能将
Binding
传递给初始化器
# 1
你有geometry
是GeometryProxy
,另一个geometry
是View
。内部的geometry
(GeometryProxy
)是首选的,因为它在最局部的作用域中。这意味着您不能访问geometry
视图。
你可以通过在视图上使用大写字母来解决这个问题,你应该按照惯例这样做(为了避免类似的问题):
struct Geometry: View {
/* ... */
}
# 2
现在您已经解决了第一个问题,现在您将得到错误:
无法将类型'GeometryProxy'的值转换为期望的参数类型'Binding'
通过改变行来解决这个问题:
@Binding var geometry: GeometryProxy
:
let geometry: GeometryProxy