Swiftui 相对宽度覆盖

Swiftui 相对宽度覆盖,swiftui,Swiftui,Xcode 11 Beta 4已弃用.relativeSize以及.relativeWidth和.relativeHight(请参阅) 那么,替代方案是什么呢 我想创建一个覆盖,其宽度相对于其父对象 假设我有以下主要观点 struct MainView: View { var body: some View { ZStack(alignment: .topLeading) { BackgroundView() SideBarView()

Xcode 11 Beta 4已弃用
.relativeSize
以及
.relativeWidth
.relativeHight
(请参阅)

那么,替代方案是什么呢

我想创建一个覆盖,其宽度相对于其父对象

假设我有以下主要观点

struct MainView: View {
  var body: some View {
    ZStack(alignment: .topLeading) {
        BackgroundView()
        SideBarView()
          .frame(idealWidth: 200)
          .fixedSize(horizontal: true, vertical: false)
    }
  }
}
通过一个简单的
背景视图
侧边栏视图
以及预期的效果

struct SideBarView: View {
    var body: some View {
        Rectangle()
            .foregroundColor(.green)
    }
}

struct BackgroundView: View {
    var body: some View {
        Rectangle()
            .foregroundColor(.red)
    }
}
这在发行说明和中提出

如何避免像以前一样使用
.relativeWidth(0.3)
而不是
.frame(理想宽度:)
对这些值进行硬编码?1



1注意:使用
.relativeWidth
从未真正起作用,例如,使用
0.3
作为相对值,从未产生过占父视图宽度30%的视图,但您可以通过尝试和错误来接近所需的结果。

有多种方法可以实现它,一种方法是使用
.overlay
而不是
ZStack
。您在覆盖中使用的视图将获得父级提供的
BackgroundView
的大小。然后您只需使用获得宽度并将其乘以0.7:

struct ContentView:View{
var body:一些观点{
BackgroundView().overlay(侧边栏视图())
}
}
结构侧边栏视图:视图{
var body:一些观点{
GeometryReader{中的代理
HStack{
垫片()
矩形()
.frame(宽度:proxy.size.width*0.7)
.fixedSize(水平:真,垂直:假)
.foregroundColor(.绿色)
}
}
}
}
结构背景视图:视图{
var body:一些观点{
矩形()
.foregroundColor(.red)
}
}

很有效,谢谢。虽然我觉得奇怪的是,对于一个相对普通和简单的特性来说,它是如此复杂。