间隔符打断按钮外观,按钮仍然切换

  • 本文关键字:按钮 外观 swift swiftui
  • 更新时间 :
  • 英文 :


我创建了一个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的动态内容应该是单个视图,因此将按钮间隔符对嵌入到另一个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)

最新更新