// The dispatch fires over and over again. No idea why yet
// this causes flickering of the images in the List.
// I am only loading a total of 3 items.
init(urlString: String) { ....
означает, что init вызывает снова и снова
он может быть вызван только из этой части
// All of these image end up flickering
// every few seconds or so.
ImageView(withURL: item.artworkUrl60)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 5))
В каком случае SwiftUI будет делать это? Я не вижу ничего, кроме изменения макета. Кажется, что изменение размера ImageView - это то, где можно найти это мерцание.
Я попробую сыграть с этой частью
.resizable()
.aspectRatio(contentMode: .fit)
или применить
ImageView(withURL: item.artworkUrl60)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 5))
.fixedSize()
Что такое по предложению Asperi ( создайте изображение фиксированного размера из загруженных данных в фоновом режиме ) и удалите
.resizable()
.aspectRatio(contentMode: .fit)
из макета, вероятно, это лучший подход
или просто переместите .frame(width:60, height:60)
из ImageView и примените его в своем Списке
ImageView(withURL: item.artworkUrl60)
.frame(width:60, height:60)
.padding(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 5))
Я также постараюсь исправить размеры всех компонентов Списка ..., пока вы не найдете, какой из них вызывает мерцание.