在我的列表中,如果UIViewRepresentable是列表中的唯一项,则不会更新。如果我添加例如文本,它起作用。要查看效果,请再次上下滚动。 我在做什么错了?
她是我的代码:
struct Test : UIViewRepresentable {
var text : String
func makeUIView(context: UIViewRepresentableContext<Test>) -> UILabel {
UILabel()
}
func updateUIView(_ uiView: UILabel, context: UIViewRepresentableContext<Test>) {
uiView.text = text
}
typealias UIViewType = UILabel
}
class Data : ObservableObject {
@Published var names = UIFont.familyNames
}
struct ContentView : View {
@EnvironmentObject var data : Data
var body: some View {
VStack {
List(data.names, id: \.self) { name in
Test(text: name)
// Text(name) // as soon as you comment this out, it works
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
答案 0 :(得分:1)
目前,我知道可以使用的变体/解决方法(已在所有可用的Xcode 11.x上进行了测试)
var body: some View {
VStack {
List(data.names, id: \.self) { name in
Test(text: name).id(name) // << here !!
}
}
}
注意:在很大的列表上可能是性能下降,但是在大多数情况下并不明显。
PS:顺便说一下,大约class Data
-不要用与系统一相同的名称来命名您的类,否则可能会造成混乱和不可预期的问题。