【问题标题】:SDWebImageSwiftUI - How to load a fallback image if the first one fails?SDWebImageSwiftUI - 如果第一个失败,如何加载后备图像?
【发布时间】:2022-01-16 08:09:47
【问题描述】:

我需要获取另一张图片以防第一张图片失败并且我很难弄清楚如何使用 SDWebImageSwiftUI 进行此操作。

关于如何做到这一点的任何线索?

【问题讨论】:

  • SwiftUI 在哪里?
  • 它实际上是一个 SwiftUI 专有库。

标签: ios swift image swiftui sdwebimage


【解决方案1】:

您可以在WebImage 上使用onFailure 属性。像这样的东西可以工作:

import SDWebImageSwiftUI

struct DoubleImageView: View {
    @State var url = URL(string: "https://via.placeholder.com/150x150.jpg")

    var body: some View {
        WebImage(url: url)
            .placeholder(Image(systemName: "person").resizable())
            .onFailure { _ in
                url = URL(string: "https://via.placeholder.com/72x72.jpg")
            }
            .resizable()
            .frame(width: 100, height: 100)
    }
}

只需将初始 url 更改为 "https://via.placeholder.com",这将导致加载图像失败,进而更新 url 并使用新的 url 重新加载图像。

【讨论】:

  • 这正是我想要的。非常感谢!
  • 它已经是它自己的View,所以你可以使用它而不是WebImage,只需在初始化程序中传递两个url以及你想要添加的其他属性。我不确定您是否可以将其创建为ViewModifier,因为它需要@State,扩展也是如此。或者,您可以使用ImageManager 并推出您自己的解决方案,但这会更复杂,或者您可以使用UIViewRepresentable 包装UIImageView,但这似乎又会更复杂
  • 你完全正确,它已经是一个可重用的视图。非常感谢!
  • 是否有特殊原因将其取消标记为已接受的答案?
  • 绝对不是。我想除了将其标记为已接受的答案之外,我还想对您的答案进行投票,并且不小心单击了“检查”按钮,将您的答案取消标记为已接受。我很抱歉!现在应该修好了。
【解决方案2】:
import SDWebImageSwiftUI


struct ContentView: View {
    var body: some View {
             WebImage.init(url: URL(string: "https://via.placeholder.com/300/09f.png/fff"))
.placeholder(Image(uiImage: #imageLiteral(resourceName: "placeholder")))
        }
 }

上面的代码对我有用, 希望它对你有用:)

【讨论】:

  • 1) 据我所知,.placeholder 中的视图应该在从服务器下载图像时显示,而不是在发生错误时显示。 2)我还需要从服务器获取后备图像,而不是您的示例中显示的本地 UIImage。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
相关资源
最近更新 更多