Swiftui 如何设置背景视图';s大小等于前景视图';s码?

Swiftui 如何设置背景视图';s大小等于前景视图';s码?,swiftui,Swiftui,我有一个前景视图和一个背景视图。前景视图包含一些文本、图像和几个堆栈视图。它可以自动调整大小,看起来很完美。我想添加一个与前景视图的自动大小相匹配的背景视图。我的背景视图是由一些形状组成的视图 我尝试过的事情: 如果我使用ZStack,我的背景视图会自动调整大小(填充容器) 如果将背景覆盖在前景顶部,则背景视图的大小正确,但它会遮挡前景视图 如果将前景视图覆盖在背景视图之上,则背景视图将确定其自身的大小 代码示例 前景视图 背景视图 背景视图是一个进度条 struct ProgressBar

我有一个前景视图和一个背景视图。前景视图包含一些文本、图像和几个堆栈视图。它可以自动调整大小,看起来很完美。我想添加一个与前景视图的自动大小相匹配的背景视图。我的背景视图是由一些形状组成的
视图

我尝试过的事情:

  • 如果我使用
    ZStack
    ,我的背景视图会自动调整大小(填充容器)
  • 如果将背景覆盖在前景顶部,则背景视图的大小正确,但它会遮挡前景视图
  • 如果将前景视图覆盖在背景视图之上,则背景视图将确定其自身的大小
代码示例 前景视图 背景视图 背景视图是一个进度条

struct ProgressBar: View {
    @Binding var value: Float
    
    var body: some View {
        GeometryReader { gr in
            ZStack(alignment: .leading) {
                Rectangle()
                    .frame(width: gr.size.width,
                           height: gr.size.height)
                    .opacity(0.3)
                    .foregroundColor(Color(UIColor.systemTeal))
                
                Rectangle()
                    .frame(width: min(CGFloat(self.value)*gr.size.width, gr.size.width),
                           height: gr.size.height)
                    .foregroundColor(Color(UIColor.systemBlue))
                    .animation(.linear)
            }
        }
    }
}

struct ProgressBar_Previews: PreviewProvider {
    static var previews: some View {
        ProgressBar(value: .constant(0.5))
    }
}
我试过的东西
事实证明,答案很简单:答案是

struct ProgressBar: View {
    @Binding var value: Float
    
    var body: some View {
        GeometryReader { gr in
            ZStack(alignment: .leading) {
                Rectangle()
                    .frame(width: gr.size.width,
                           height: gr.size.height)
                    .opacity(0.3)
                    .foregroundColor(Color(UIColor.systemTeal))
                
                Rectangle()
                    .frame(width: min(CGFloat(self.value)*gr.size.width, gr.size.width),
                           height: gr.size.height)
                    .foregroundColor(Color(UIColor.systemBlue))
                    .animation(.linear)
            }
        }
    }
}

struct ProgressBar_Previews: PreviewProvider {
    static var previews: some View {
        ProgressBar(value: .constant(0.5))
    }
}
struct Demo_Preview: PreviewProvider {
    static var previews: some View {
        Group {
            // Attempt 1
            ZStack {
                ProgressBar(value: .constant(0.5))
                ForegroundView()
            }

            // Attempt 2
            ForegroundView().overlay(ProgressBar(value: .constant(0.5)))

            // Attempt 3
            ProgressBar(value: .constant(0.5)).overlay(ForegroundView())
        }
    }
}
struct Demo_Preview: PreviewProvider {
    static var previews: some View {
        Group {
            ForegroundView().background(ProgressBar(value: .constant(0.5)))
        }
    }
}