使用SwiftUI';s relativeWidth仅在框架视图内工作

使用SwiftUI';s relativeWidth仅在框架视图内工作,swiftui,Swiftui,尝试在SwiftUI中构建一个条形图元素,其宽度与基于元素值的父视图成比例。以下是问题的简化版本: struct bar视图:视图{ var body:一些观点{ 紫色 .相对宽度(0.5) } } …这将产生: 我希望relativeWidth修改器使用它的父对象,它应该是屏幕的宽度,因此颜色视图应该是屏幕宽度的一半并居中。如果视图嵌入到结构件视图中,则它将按预期工作: struct bar视图:视图{ var body:一些观点{ 紫色 .相对宽度(0.5) .框架(宽:200,高:20

尝试在SwiftUI中构建一个条形图元素,其宽度与基于元素值的父视图成比例。以下是问题的简化版本:

struct bar视图:视图{
var body:一些观点{
紫色
.相对宽度(0.5)
}
}
…这将产生:

我希望relativeWidth修改器使用它的父对象,它应该是屏幕的宽度,因此颜色视图应该是屏幕宽度的一半并居中。如果视图嵌入到结构件视图中,则它将按预期工作:

struct bar视图:视图{
var body:一些观点{
紫色
.相对宽度(0.5)
.框架(宽:200,高:200)
}
}

我需要视图在其容器内灵活,无需指定框架。我知道有GeometryReader,但这似乎有点像黑客,因为相对宽度似乎正是这里需要的。有什么想法吗?

好吧,
.relativeWidth()
和beta4一起消失了。。。所以我正在更新我的答案

作为一种替代方法,它也有其自身的不便,在您的情况下,使用形状可能是一个很好的替代方法

用于定义形状的
path()
函数有一个rect参数,可帮助您绘制图形。这里有一个解决方案:

导入快捷界面
struct BarShape:Shape{
让百分比:CGFloat
func路径(在rect:CGRect中)->path{
设fillPart=CGRect(x:0,y:0,宽度:rect.size.width*百分比,高度:rect.size.height)
var p=Path()
p、 addRoundedRect(in:fillPart,cornerSize:CGSize(宽度:8,高度:8))
返回p
}
}
结构ContentView:View{
var body:一些观点{
条形(百分比:0.7)。填充(颜色。紫色)
}
}

这是一款beta版产品,谁知道呢,也许它的行为正是它的预期行为。我也这么认为,但似乎我不了解这个系统。仍在掌握新概念。谢谢。