列表中的 SwiftUI ScrollView 具有可怕的性能影响

问题描述 投票:0回答:2

我有一个非常简单的 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()
  }
}
ios swift performance swiftui swiftui-list
2个回答
2
投票

看起来至少 List、ScrollView、Form 和 NavigationView 可能存在内存泄漏问题(请参阅这个问题)。该问题的作者向 Apple 提交了反馈 (FB7318839)。我也鼓励您这样做,希望这只是一个很快就能修复的错误。


0
投票

如果您需要在主

ScrollView
List
中显示另一个水平列表或列表,有一个非常好的技巧可以使性能完美,只需用
Section
包装每个水平集合,如下所示:

Section {
    //horizontal collection here
}
© www.soinside.com 2019 - 2024. All rights reserved.