在SwiftUI中,如何为条形图创建动态矩形?

在SwiftUI中,如何为条形图创建动态矩形?,swiftui,Swiftui,我正在尝试创建一个自定义的百分比条形图,如下所示 但是,我无法以编程方式设置条的宽度,我做错了什么 设置.frame(宽度:UIScreen.main.bounds.width*百分比,高度:23)会产生以下错误:对成员“frame(宽度:高度:对齐:)”的引用不明确 导入快捷界面 结构条形图视图:视图{ @绑定变量百分比:浮动 初始化(百分比:绑定){ 自身百分比=百分比 } var body:一些观点{ ZStack{ 矩形().填充(颜色.黄色).边框(高度:30).边框(颜色.黑色,宽

我正在尝试创建一个自定义的百分比条形图,如下所示

但是,我无法以编程方式设置条的宽度,我做错了什么

设置.frame(宽度:UIScreen.main.bounds.width*百分比,高度:23)会产生以下错误:对成员“frame(宽度:高度:对齐:)”的引用不明确

导入快捷界面
结构条形图视图:视图{
@绑定变量百分比:浮动
初始化(百分比:绑定){
自身百分比=百分比
}
var body:一些观点{
ZStack{
矩形().填充(颜色.黄色).边框(高度:30).边框(颜色.黑色,宽度:1)
HStack{
圆角转角(拐角半径:5)
.填充(颜色.绿色).边框(宽度:300,高度:23).填充(2)
垫片()
}
HStack{
文本(“条形图视图”)。填充(2)
垫片()
文本(\(字符串(格式:“%02.f”,参数:[self.percent]))%)
}
}
}
}
有没有办法确定ZStack中第一个矩形的宽度,并计算其百分比。如果可能的话,我希望这也能在横向模式下自动更新。

您可以使用尺寸,但在这种情况下,我认为使用形状更合适:

导入快捷界面
结构条形图视图:视图{
@绑定变量百分比:浮动
初始化(百分比:绑定){
自身百分比=百分比
}
var body:一些观点{
HStack{
文本(“条形图视图”)。填充(5)
垫片()
文本(\(字符串(格式:“%02.f”,参数:[self.percent*100]))%”。填充(5)
}
.background(左部分(pct:CGFloat(百分比)).fill(颜色.绿色))
.背景(右侧部分(百分比:CGFloat)。填充(颜色。黄色))
.填充(10)
}
结构LeftPart:形状{
让pct:CGT浮动
func路径(在rect:CGRect中)->path{
var p=Path()
p、 addRoundedRect(in:CGRect(x:0,y:0,宽度:rect.size.width*pct,高度:rect.size.height),cornerSize:.0)
返回p
}
}
结构RightPart:形状{
让pct:CGT浮动
func路径(在rect:CGRect中)->path{
var p=Path()
p、 addRoundedRect(in:CGRect(x:rect.size.width*pct,y:0,width:rect.size.width*(1-pct),height:rect.size.height),cornerSize:.0)
返回p
}
}
}
结构ContentView:View{
var body:一些观点{
条形图视图(百分比:。常数(0.75))
}
}
您可以使用来处理尺寸,但在这种情况下,我认为使用形状更适合:

导入快捷界面
结构条形图视图:视图{
@绑定变量百分比:浮动
初始化(百分比:绑定){
自身百分比=百分比
}
var body:一些观点{
HStack{
文本(“条形图视图”)。填充(5)
垫片()
文本(\(字符串(格式:“%02.f”,参数:[self.percent*100]))%”。填充(5)
}
.background(左部分(pct:CGFloat(百分比)).fill(颜色.绿色))
.背景(右侧部分(百分比:CGFloat)。填充(颜色。黄色))
.填充(10)
}
结构LeftPart:形状{
让pct:CGT浮动
func路径(在rect:CGRect中)->path{
var p=Path()
p、 addRoundedRect(in:CGRect(x:0,y:0,宽度:rect.size.width*pct,高度:rect.size.height),cornerSize:.0)
返回p
}
}
结构RightPart:形状{
让pct:CGT浮动
func路径(在rect:CGRect中)->path{
var p=Path()
p、 addRoundedRect(in:CGRect(x:rect.size.width*pct,y:0,width:rect.size.width*(1-pct),height:rect.size.height),cornerSize:.0)
返回p
}
}
}
结构ContentView:View{
var body:一些观点{
条形图视图(百分比:。常数(0.75))
}
}

Wow,感谢您的快速响应,效果非常好!似乎Beta 5在这个优雅的解决方案中打破了“var p=Path()”这一行。是的,但我不担心。他们已经在发行说明中承认了这一点,所以我希望它能回到beta 6。这太棒了!谢谢你提供的信息。这里有一个条形图库,你也可以查看。哇,谢谢你的快速回复,它工作得非常好!似乎Beta 5在这个优雅的解决方案中打破了“var p=Path()”这一行。是的,但我不担心。他们已经在发行说明中承认了这一点,所以我希望它能回到beta 6。这太棒了!感谢您提供的信息。这里有一个条形图库,您也可以查看它
import SwiftUI

struct BarChartView : View {
    @Binding var percent: Float

    init(percentage: Binding<Float>){
        self._percent = percentage
    }

    var body: some View {

            ZStack {
                Rectangle().fill(Color.yellow).frame(height: 30).border(Color.black, width:1)
                HStack {
                        RoundedRectangle(cornerRadius: 5)
                            .fill(Color.green).frame(width: 300, height:23).padding(2)
                    Spacer()
                }

                HStack {
                    Text("Bar Chart View").padding (2)
                    Spacer()
                    Text("\(String(format: "%02.f", arguments: [self.percent]))%")
                }

            }
        }

}