假设我有一个圆,我想在互动时更改其半径。我希望将半径定义为视图高度的百分比。我有以下内容:
select * from login
我的问题是我无法在变量语句中引用“ geometry.size.height”,因为它没有嵌套在GeometryReader中。我尝试使用“ UIScreen.main.bounds.width”,但这给出了整个屏幕的高度。在我的情况下,由于ButtonView嵌套在一个标签栏中,因此我有兴趣获得视图上方的视图高度。
答案 0 :(得分:2)
状态变量的初始值不能基于特定的布局。创建该结构时,它不知道布局是什么。但是,您可以在布局期间自由使用GeometryReader的代理。例如,这会在视图高度的10%到50%之间缩放圆圈。请注意在框架中此处使用maxHeight
。
struct ButtonView: View {
@State private var scale: CGFloat = 0.1
var body: some View {
GeometryReader { proxy in
Button(action: { self.scale = (self.scale == 0.1) ? 0.5 : 0.1 }) {
Circle()
}
.frame(maxHeight: proxy.size.height * self.scale)
}
}
}
如果您希望在首次出现时将信息捕获到State变量中,则可以在onAppear
块中进行。
struct ButtonView: View {
@State private var radius: CGFloat = 0.0
var body: some View {
GeometryReader { proxy in
Button(action: { self.radius = 0.5 * proxy.size.height }) {
Circle()
}
.frame(maxHeight: self.radius)
.onAppear { self.radius = 0.1 * proxy.size.height}
}
}