如何解决垫片破坏按钮外观,按钮仍然切换
我创建了一个HStack,其中包含按钮的集合,这些按钮在被选中和取消选中时会改变外观。一次只能选择一个按钮。在项目之间添加Spacer()时,按钮切换起作用,但是即使选择的索引按预期变化,外观也不会改变。
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)
}
}
为什么会这样?我似乎想不出为什么在项目之间添加Spacer()不起作用的合理原因,但是在没有if语句的情况下添加Spacer()的情况。
解决方法
ForEach
的动态内容应该为单一视图,因此将Button-Spacer对嵌入到另一个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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。