Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swiftui 滚动视图未更新_Swiftui - Fatal编程技术网

Swiftui 滚动视图未更新

Swiftui 滚动视图未更新,swiftui,Swiftui,ScrollView在加载数据后不会更新。只有在切换到另一个屏幕并返回后,ScrollView才能成功显示数据。 对于异步映像加载,请使用: 您可以在不使用dispatchqueue的情况下对其进行测试。我在一个列表上有一个类似的问题,当我删除Dispatchqueue时,它就开始工作了 只是self.articles=welcome.articles 我解决了这个问题。更新工作正常,问题出在其他方面! 我花了几个小时来解决这个问题,我找到了一个解决办法 如果提供同一类型或视图的默认值(仅显示

ScrollView在加载数据后不会更新。只有在切换到另一个屏幕并返回后,ScrollView才能成功显示数据。

对于异步映像加载,请使用:


您可以在不使用dispatchqueue的情况下对其进行测试。我在一个列表上有一个类似的问题,当我删除Dispatchqueue时,它就开始工作了


只是
self.articles=welcome.articles

我解决了这个问题。更新工作正常,问题出在其他方面! 我花了几个小时来解决这个问题,我找到了一个解决办法

如果提供同一类型或视图的默认值(仅显示),则当数组为空时,一切正常。如果数组为空,则视图的大小似乎不正确,因此您看不到任何内容,因为大小不会随着内容的更新而改变

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


希望有帮助

xcode 11.2 last beta,ios 13.2 last betaThis没有修复此问题,只是添加了一条警告:“不允许从后台线程发布更改;确保在模型更新时从主线程(通过诸如receive(on:))之类的操作符)发布值。”@Бццццццц能共享更多代码吗?struct文章可能对重现错误感兴趣。@crmk_Мцццццццццццццццц。这可能与加载图像的方式有关。在不加载图像的情况下尝试一下,也许这有助于定位问题。这是我检查的第一件事,但它也没有改变任何东西。也许这是因为scrollview在tabview中,并且在启动时首先显示它……好的,catch Dibay!还可以为ScrollView内部的VStack提供一个固定大小,这样就可以了。
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)