关于iOS14小组件的一些问题的记录.

732 阅读2分钟

1.关于图片加载.

小组件的图片的加载之前了解到不能像之前那样进行网络的异步加载和手动刷新.于是我就这样加载:

  • 之前的图片加载是这样的 将数据拼接.
数据
        PoetryRquest.request { (reslut) in
         let poetry: Poetry
         if case .success(let res) = reslut {
             poetry = res
         }else{
            poetry = Poetry(content: "我要傍近你", origin: "方不至于难过")
         }
         //:这里返回的还是PoetryEntry 但是需要带着时间线
         poeEtry = PoetryEntry(date: updateDate!, poetry: poetry,imgData: Data.init())
         let timeLine = Timeline(entries: [poeEtry], policy: .after(updateDate!))
         completion(timeLine)
图片
         PoetryRquest.fetchRemoteImage(urlString: "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1607536244259&di=05bbaed6686b95b208a709596b6199ae&imgtype=0&src=http%3A%2F%2Fimgsrc.baidu.com%2Fforum%2Fw%3D580%2Fsign%3Dabbf8f972d738bd4c421b239918b876c%2F8169ca8065380cd7e02852a7a244ad3459828159.jpg") { (result) in

             let imgData :Data
             if case .success(let res) = result {
                 imgData = res
             }else{
                 imgData = Data.init()
             }
             poeEtry.imgData = imgData
最终的数据返回
             let timeLine = Timeline(entries: [poeEtry], policy: .after(updateDate!))
             completion(timeLine)
         }
     }

这样图片是和数据一起返回的,可以加在载没问题.但是之后同事在实际开发中需要加载多张图片这种方式就不得行啦.现在加载图片方式如下:

    
  let imageUrl = "https://img.zcool.cn/community/011a5357b64c620000018c1b9e7e67.png@1280w_1l_2o_100sh.png"

  //:构建UI
  var body: some View {
      
      HStack{
          Image(uiImage: UIImage(data: imageGetImgWithUrl(imgUrl: imageUrl)) ?? placehoulder)
          .frame(width: 90, height: 90)
  }
  func imageGetImgWithUrl(imgUrl:String) -> Data {
      let imgData = try! Data.init(contentsOf: URL.init(string: imgUrl)!)
      return imgData
  }
  

利用contentsOf进行图片加载,目前使用起来简单方便.适合多张图片加载.

2.关于之前用人反馈说上篇关于小组件的updateTime 使用有问题,导致第一次加载小组件要等待一个timeline的时间才能够出数据.目前检查到的问题是:小组件在某些机型上是第一次不会加载数据.目前发现机型为11.其它机型均正常.f**k......

3.小组件的HStack,Vstack,ZStack均为懒加载.不能在其中利用for循环进行视图创建,否则每次都会添加同等数量的视图.多张图片横向排列,目前是创建四个Image.(各位小伙伴有好的建议可以指导一下,不胜感激~~~)