SWIFTUI如何捕获带有几何图形的VStack高度(在显示VStack之后)?

我想问你一些帮助。我试图使用 geometry 捕获 VStack高度,然后基于该 VStack高度值,计算其子元素的高度(在VStack内部)。

Image of my current view of VStack

我在VStack之外使用了 .frame 来填充整个屏幕。然后,我使用 .borde r目视检查它是否真正填满了屏幕(工作正常)

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

问题可以在VStack内部看到,高度显示为GCFloat734。即使边框大小大得多

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,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的高度看起来正确,但是我需要立即捕获它。

liwentao19931129 回答:SWIFTUI如何捕获带有几何图形的VStack高度(在显示VStack之后)?

如果我理解您的问题,那么您就很接近了-您只需要使用GeometryProxy类型:

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的大小发生变化,则会重新布局。

本文链接:https://www.f2er.com/2534581.html

大家都在问