我尝试了以下视图。我希望当我点击更新按钮时,矩形的颜色会改变。但是什么也没发生。为什么会发生这种事情?
struct SwiftUIView: View {
@State var index: Int = 0
var colors = [Color.red, Color.blue, Color.orange, Color.green]
var body: some View {
NavigationView {
VStack {
ForEach(0..<colors.count) { i in
if i == self.index {
Rectangle()
.fill(self.colors[i])
.frame(width: 100, height: 100)
}
}
}
.navigationBarTitle("title")
.navigationBarItems(trailing: Button(action: {
self.index += 1
}) {
Text("Update")
})
}
}
}
答案 0 :(得分:0)
更改索引值不会影响任何视图,因此不会重绘。删除ForEach
并像这样简单显示Rectangle
:
struct SwiftUIView: View {
@State var index: Int = 0
var colors = [Color.red, Color.blue, Color.orange, Color.green]
var body: some View {
NavigationView {
VStack {
Rectangle()
.fill(self.colors[index])
.frame(width: 100, height: 100)
}
.navigationBarTitle("title")
.navigationBarItems(trailing: Button(action: {
self.index += 1
}) {
Text("Update")
})
}
}
}
现在,当索引更改时,Rectangle
必须重绘,因为它的填充颜色直接取决于索引的值。