如何获取特定视图的高度?

时间:2019-12-08 02:23:32

标签: ios swift swiftui

假设我有一个圆,我想在互动时更改其半径。我希望将半径定义为视图高度的百分比。我有以下内容:

select * from login

我的问题是我无法在变量语句中引用“ geometry.size.height”,因为它没有嵌套在GeometryReader中。我尝试使用“ UIScreen.main.bounds.width”,但这给出了整个屏幕的高度。在我的情况下,由于ButtonView嵌套在一个标签栏中,因此我有兴趣获得视图上方的视图高度。

1 个答案:

答案 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}
        }
    }