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)))
}
}
}