首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFTUI如何用几何来捕获VStack高度(在VStack显示之后)?

SWIFTUI如何用几何来捕获VStack高度(在VStack显示之后)?
EN

Stack Overflow用户
提问于 2020-04-01 15:28:12
回答 1查看 2.1K关注 0票数 1

我想请你帮忙。我试图使用几何捕获VStack高度,然后根据VStack高度值计算其子元素的高度(在VStack内)。

我当前VStack视图的图像

我使用.frame在VStack之外填充整个屏幕。然后,我使用.border直观地检查它是否实际填充了屏幕(工作正常)

.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: Alignment.topLeading)

问题可以在VStack内部看到,高度显示为GCFloat 734。尽管边框大小是,但要大得多。

代码语言:javascript
复制
struct BodyView: View {
    @State var stackHeight : CGFloat = 0

    var body: some View {
        GeometryReader { geometry in
            VStack {
                Text("VStack size: \(self.stackHeight)")
                    .bold()
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .padding(.horizontal)
                    .background(Color.green)

            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: Alignment.topLeading)
            .onAppear{
                self.stackHeight = geometry.size.height
            }
            .border(Color.purple, width: 5)
        }
    }
}

struct BodyView_Previews: PreviewProvider {
    static var previews: some View {
        BodyView()
    }
}

当VStack完成加载时,我如何捕获它的实际大小?

当我触发(onAppear)时,VStack的高度看起来是正确的,但是我需要立即捕获它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 15:43:43

如果我理解你的问题,你很接近-你只需要使用GeometryProxy类型:

代码语言:javascript
复制
import SwiftUI

struct BodyView: View {

    var body: some View {
        GeometryReader { geometry in
            VStack {
                Text("VStack size: \(geometry.size.height)") // no need for state var anymore
                    .bold()
                    .frame(maxWidth: .infinity, alignment: .leading)
                    .padding(.horizontal)
                    .background(Color.green)
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: Alignment.topLeading)
            .border(Color.purple, width: 5)
        }
    }
}

struct BodyView_Previews: PreviewProvider {
    static var previews: some View {
        BodyView()
    }
}

如果GeometryReader的大小发生变化,它将再次显示出它自己。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60974522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档