SwiftUI ScrollView внутри списка имеет ужасные последствия для производительности - PullRequest
0 голосов
/ 25 сентября 2019

У меня действительно простое представление 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 внутри scrollView вызовет проблему.

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

1 Ответ

0 голосов
/ 25 сентября 2019

Кажется, что может быть проблема утечки памяти, по крайней мере, с List, ScrollView, Form и NavigationView (см. этот вопрос ).Автор этого вопроса подал отзыв в Apple (FB7318839).Я бы посоветовал вам сделать то же самое, и, надеюсь, это просто ошибка, которая скоро будет исправлена.

...