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

时间:2019-09-25 13:46:21

标签: ios swift performance swiftui swiftui-list

我有一个非常简单的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和文本似乎与问题无关,即使滚动视图中的空格键也会触发问题。

List(items) { _ in
  ScrollView(.horizontal) {
    Spacer()
  }
}

1 个答案:

答案 0 :(得分:0)

似乎至少有List,ScrollView,Form和NavigationView可能存在内存泄漏问题(请参阅this question)。该问题的作者向Apple(FB7318839)提出了反馈。我也鼓励您也这样做,希望这只是一个很快就会解决的错误。