【发布时间】:2020-03-14 18:13:16
【问题描述】:
在我的列表中,如果 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()
}
}
【问题讨论】:
-
我运行了您的代码副本,当 UIViewRepresentable 仅在列表中查看时,一切正常
-
确认问题。在版本 11.2.1 (11B500) 上测试。
-
如果 List 替换为 ScrollView/ForEach 则正确更新,因此似乎是 List 的问题。
-
是的,这不是答案或解决方案,而是缩小问题区域的调查结果。看起来(观察视图层次结构)问题恰恰出在重复使用的单元格中。
-
在 Xcode 11.3 beta (11C24b) 上测试。现在更新了,但是……更新后,虽然是可见的,但是失去了前导填充,所以看起来有点难看。我建议提交雷达。
标签: swiftui