Swift 间隔棒会破坏按钮外观,按钮仍会切换

Swift 间隔棒会破坏按钮外观,按钮仍会切换,swift,swiftui,Swift,Swiftui,我创建了一个HStack,其中包含一组按钮,这些按钮在选中和取消选中时会改变外观。一次只能选择一个按钮。在项目之间添加分隔符()时,“按钮切换”起作用,但是外观不再改变,即使选定的索引正在按预期的方式改变 struct GenericFilterButton: View { var category: String var textColor: Color var buttonColor: Color var body: some View { T

我创建了一个HStack,其中包含一组按钮,这些按钮在选中和取消选中时会改变外观。一次只能选择一个按钮。在项目之间添加分隔符()时,“按钮切换”起作用,但是外观不再改变,即使选定的索引正在按预期的方式改变

struct GenericFilterButton: View {
    var category: String
    var textColor: Color
    var buttonColor: Color
    var body: some View {
        Text(category)
            .font(.custom("Avenir Heavy", size: 14))
            .foregroundColor(textColor)
            .padding(.vertical, 10)
            .padding(.horizontal, 14)
            .background(buttonColor)
            .cornerRadius(50)
            .lineLimit(1)
    }
}

struct FilterViewCompletionPercent: View {
    var completionPercent = ["Any", "25%", "50%", "75%", "100%"]
    @State var percentSelected = 0
    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            Text("Completion")
                .font(.custom("Avenir Heavy", size: 18))
                .foregroundColor(Color.black.opacity(0.5))
                .padding(.bottom, 20)
            HStack(alignment: .center) {
                ForEach(0..<completionPercent.count) { i in
                    Button(action: {
                        self.percentSelected = i
                        print(self.percentSelected)
                    }) {
                        GenericFilterButton(category: self.completionPercent[i], textColor: self.percentSelected == i ? Color.white : Color.black.opacity(0.5), buttonColor: self.percentSelected == i ? Color.blue : Color.white.opacity(0.0))
                    }
                    if i != 4 {
                        Spacer()
                    }
                }
            }.padding(.bottom, 20)
            Divider()
                .background(Color.black.opacity(0.1))
        }.padding(.horizontal, 25)
            .padding(.top, 30)
    }
}
struct GenericFilterButton:视图{
变量类别:字符串
var textColor:Color
var按钮颜色:颜色
var body:一些观点{
文本(类别)
.font(.custom(“Avenir Heavy”,大小:14))
.foregroundColor(文本颜色)
.padding(.vertical,10)
.padding(.卧式,14)
.背景(按钮颜色)
.转弯半径(50)
.lineLimit(1)
}
}
结构FilterViewCompletionPercent:视图{
var completionPercent=[“任何”、“25%”、“50%”、“75%”、“100%”]
@状态变量%selected=0
var body:一些观点{
VStack(对齐:。前导,间距:0){
文本(“完成”)
.font(.custom(“Avenir Heavy”,大小:18))
.foregroundColor(颜色.黑色.不透明度(0.5))
.padding(.bottom,20)
HStack(对齐:。中心){

ForEach(0..ForEach的动态内容应为单视图,因此将按钮间隔对嵌入另一个
HStack

使用Xcode 11.4/iOS 13.4进行测试

HStack(alignment: .center) {
    ForEach(0..<completionPercent.count, id: \.self) { i in
        HStack {                       // << this one !!
            Button(action: {
                self.percentSelected = i
                print(self.percentSelected)
            }) {
                GenericFilterButton(category: self.completionPercent[i], textColor: self.percentSelected == i ? Color.white : Color.black.opacity(0.5), buttonColor: self.percentSelected == i ? Color.blue : Color.white.opacity(0.0))
            }
            if i != 4 {
                Spacer()
            }
        }
    }
}.padding(.bottom, 20)
HStack(对齐:。中心){

ForEach(0..ForEach的动态内容应为单视图,因此将按钮间隔对嵌入另一个
HStack

使用Xcode 11.4/iOS 13.4进行测试

HStack(alignment: .center) {
    ForEach(0..<completionPercent.count, id: \.self) { i in
        HStack {                       // << this one !!
            Button(action: {
                self.percentSelected = i
                print(self.percentSelected)
            }) {
                GenericFilterButton(category: self.completionPercent[i], textColor: self.percentSelected == i ? Color.white : Color.black.opacity(0.5), buttonColor: self.percentSelected == i ? Color.blue : Color.white.opacity(0.0))
            }
            if i != 4 {
                Spacer()
            }
        }
    }
}.padding(.bottom, 20)
HStack(对齐:。中心){
ForEach(0。。