【发布时间】:2021-12-31 00:15:48
【问题描述】:
我在 SwiftUI 中为正在开发的应用创建了一个自定义选择按钮视图。我一生都无法弄清楚为什么有时按钮什么都不做 - 它总是最后 x 个按钮不起作用(这让我认为这与 swift ui 的 10 视图限制有关,有人告诉我,在使用 for each 循环时这不是问题)。
有时它会按预期工作,有时它会切断最后 x 个按钮。尽管当它切断按钮时,它在不同的模拟器和物理设备之间是一致的。有人能看出这里有什么问题吗?
我是 SwiftUI 的新手,所以可能很简单...
@EnvironmentObject var QuestionManager: questionManager
var listItems: [String]
@State var selectedItem: String = ""
var body: some View {
GeometryReader {geom in
ScrollView{
VStack{
ForEach(Array(listItems.enumerated()), id: \.offset){ item in
Button(action: {
if (selectedItem != item.element) {
selectedItem = item.element
} else {
selectedItem = ""
QuestionManager.tmpAnswer = ""
}
}, label: {
GeometryReader { g in
Text("\(item.element)")
.font(.system(size: g.size.width/22))
.fixedSize(horizontal: false, vertical: true)
.foregroundColor(.black)
.lineLimit(2)
.frame(width: g.size.width, height: g.size.height)
.minimumScaleFactor(0.5)
.background(
Rectangle()
.fill((item.element == selectedItem) ? Color(.green) : .white)
.frame(width: g.size.width, height: g.size.height)
.border(Color.gray)
).scaledToFit()
}
.frame(width: geom.size.width*0.92, height: 45)
}).disabled((Int(QuestionManager.answers.year) == Calendar.current.component(.year, from: Date())) ? validateMonth(month: item.offset) : false)
}
}
.frame(width: geom.size.width)
}
}
}
} ```
【问题讨论】:
-
欢迎来到 Stack Overflow!请拨打tour 并查看:How do I ask a good question? 和How to create a Minimal, Reproducible Example。查看您的代码,您可能正在使用
.enumerated()。 Enumerated doesn't play well with a `ForEach.
标签: swift button swiftui swiftui-foreach