6

一連のテキストをリストする非常に単純な 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 は問題とは関係がないように見えます。scrollView 内の Spacer でも問題が発生します。

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

1 に答える 1