我有一个非常简单的 SwiftUI 视图,其中列出了一堆文本:
extension String: Identifiable {
public var id: String { return self }
}
struct ContentView: View {
var items: [String] = (0..<1000).map { $0.description }
var body: some View {
List(items) { str in
HStack {
Text(str)
}
}
}
}
这段代码似乎工作正常,并为我提供了流畅的滚动性能。
如果我更改此设置以使 HStack 位于水平滚动的 ScrollView 内部:
var body: some View {
List(items) { str in
ScrollView(.horizontal) {
HStack {
Text(str)
}
}
}
}
当我上下滚动列表时,性能受到巨大影响,并且内存似乎无限增长。内存调试器中没有任何泄漏。
我想知道是否有人知道为什么性能受到如此巨大的影响,以及是否有任何解决方法。
更新:
HStack 和 Text 似乎与该问题无关,即使滚动视图内的 Spacer 也会触发该问题。
List(items) { _ in
ScrollView(.horizontal) {
Spacer()
}
}
看起来至少 List、ScrollView、Form 和 NavigationView 可能存在内存泄漏问题(请参阅这个问题)。该问题的作者向 Apple 提交了反馈 (FB7318839)。我也鼓励您这样做,希望这只是一个很快就能修复的错误。
如果您需要在主
ScrollView
或List
中显示另一个水平列表或列表,有一个非常好的技巧可以使性能完美,只需用Section
包装每个水平集合,如下所示:
Section {
//horizontal collection here
}