首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS WidgetKit:远程映像无法加载

iOS WidgetKit:远程映像无法加载
EN

Stack Overflow用户
提问于 2020-07-25 08:16:38
回答 2查看 7.5K关注 0票数 24

我注意到了一件奇怪的事情:在新的小部件中,经常没有显示远程图像,即使图像已经成功加载并放置在缓存中,也不会显示

对于图像下载,我尝试过:

  • SDWebImageSwiftUI
  • Kingfisher
  • SwURL

所有这些都表明图像加载成功,但是实际的小部件没有显示它。

代码语言:javascript
复制
struct TestWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {
        WebImage(url: URL(string: "https://miro.medium.com/max/3840/0*TLqp5Uwavd-U_xrs.jpg"))
                        .onSuccess()
                        .resizable()
    }
}

在调试器的第二次运行(从缓存加载图像)中,我会显示图像,但不会(?)刚开始的时候。

就像在onSuccess中,我需要触发UI失效吗?但是怎么做呢?

(因为它恰好发生在字面上的每一张图片-我试过--我不认为它有什么不妥的地方)

Environment:

simulators)

  • Xcode

  • iOS 14 Beta 3(设备和 12 Beta 3
  • 在调试运行期间,内存使用量约为15 14

)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-13 03:33:13

是的,正如Konstantin所提到的,不支持加载映像asynchronously.有两个选项可以在小部件中加载网络映像。

TimelineProvider中的

  1. 要么获取所有图像,然后直接将它们注入视图。

  1. 使用Data(contentsOf: url)获取图像。这样,它仍然同步地获取它们,但是代码更简洁。样本代码-

结构NetworkImage:视图{私有的让url: URL?变量体:一些视图{组{如果让url = url,让imageData =尝试?Data(contentsOf: url),设uiImage = UIImage(data: imageData) { Image(uiImage: uiImage) .resizable() .aspectRatio(contentMode:.fill) }imageData}{image(“占位符-图像”) } }}

这个视图可以像这样使用-

代码语言:javascript
复制
NetworkImage(url: url)
票数 45
EN

Stack Overflow用户

发布于 2020-07-25 08:29:29

明白了:它根本不受支持,您的目标是在TimelineProvider中加载图像:

https://developer.apple.com/forums/thread/652581

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63086029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档