ScrollView未更新

时间:2019-10-28 05:30:17

标签: swiftui

ScrollView在加载数据后不会更新。只有在我切换到另一个屏幕并返回后,ScrollView才能成功显示数据。 https://youtu.be/0q3R6LaKbnE

对于异步图像加载,请使用:https://github.com/dmytro-anokhin/url-image

import Combine
import SwiftUI

class NewsAPI: ObservableObject {

    @Published var articles: Articles = [Article]()

    init() {
        guard let url: URL = URL(string: "https://newsapi.org/v2/top-headlines?country=ru&apiKey=376a97643c6c4633afe57427b71e8ebd") else { return }
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            do {
                guard let json = data else { return }
                let welcome = try JSONDecoder().decode(ModelNews.self, from: json)
                DispatchQueue.main.async {
                    self.articles = welcome.articles!
                }
            }
            catch {
                print(error)
            }
        }
        .resume()
    }
}

struct CardList: View {

    @ObservedObject var newsAPI: NewsAPI = NewsAPI()

    var body: some View {
        NavigationView {
            ScrollView {
                VStack(alignment: .center) {
                    ForEach(self.newsAPI.articles, id: \.self) { i in
                        CardView(article: i)

2 个答案:

答案 0 :(得分:0)

您可以在没有调度队列的情况下对其进行测试。我在列表上有一个类似的问题,当我删除Dispatchqueue时,它可以正常工作。

self.articles = welcome.articles!

答案 1 :(得分:0)

我解决了这个问题。更新工作正常,问题出在其他地方! 为了解决这个问题,我已经奋斗了几个小时,并且找到了解决方案。

如果从同一类型或视图中提供默认值(仅显示),则在数组为空时,一切都会正常进行。如果数组为空,则视图的尺寸似乎错误,因此您看不到任何内容,因为尺寸不会随着内容的更新而改变。

简而言之::如果数组为空,则提供默认值或显示的替代视图。

希望有帮助!