如何将数组中的非静态图像加载到 Swift 中的集合视图中

Posted

技术标签:

【中文标题】如何将数组中的非静态图像加载到 Swift 中的集合视图中【英文标题】:How to load non static images from an array into collection view in Swift 【发布时间】:2020-09-29 20:05:44 【问题描述】:

我正在尝试从我的 firebase firestore 获取图像 URL 并将它们保存在一个数组中。

然后我想设置一个集合视图,以类似于 Instagram(水平)的滑动方式显示数组中的图像。

我正在检索我的图像 url 的值并将它们保存在变量中,然后将它们设置在一个数组中,但是当我设置我的集合视图时它不起作用,我相信集合视图函数接收到的数组为空值,因为我在视图中检索并存储它们确实加载方法

我做错了什么?

对此有什么帮助吗?谢谢你。 这是我的代码:

public var imgArray = [URL]()
var getHeaderURL : URL!
var getHeaderURL2 : URL!
var getHeaderURL3: URL!
var getHeaderURL4: URL!

var headerImgURL:String!
var headerImgURL2:String!
var headerImgURL3:String!
var headerImgURL4:String!
override func viewDidLoad()

db.collection("Shops").document(getKey!)
        .addSnapshotListener  [self] snapshot, error in
            if error != nil 
                print(error ?? "Couldn't update text field TextUser according to database")
            
            else
            
     
                //getting url's as strings
                self.headerImgURL = snapshot?["ShopHeaderImg"] as? String
                self.headerImgURL2 = snapshot?["ShopHeaderImg2"] as? String
                self.headerImgURL3 = snapshot?["ShopHeaderImg3"] as? String
                self.headerImgURL4 = snapshot?["ShopHeaderImg4"] as? String
            
             //converting url strings into url type.
             getHeaderURL = URL(string: self.headerImgURL)
             getHeaderURL2 = URL(string: self.headerImgURL2)
             getHeaderURL3 = URL(string: self.headerImgURL3)
             getHeaderURL4 = URL(string: self.headerImgURL4)
            
             self.imgArray = [getHeaderURL!,getHeaderURL2!,getHeaderURL3!,getHeaderURL4!]
             print(imgArray)
  

我的收藏视图函数:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    print(imgArray.count)
    print("this is the count of images")
    return imgArray.count
   


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
let cell = imageCollectionView.dequeueReusableCell(withReuseIdentifier: "imgCell", for: indexPath) as! ImageCellViewController
    
    
    cell.sliderImage.sd_setShowActivityIndicatorView(true)
    cell.sliderImage.sd_setIndicatorStyle(.gray)
    cell.sliderImage.sd_setImage(with: imgArray[indexPath.row], placeholderImage: UIImage(named: "Profile_avatar_placeholder_large"))
    
    return cell

【问题讨论】:

你为collectionView设置数据源了吗?你也应该调用 super.viewDidLoad() 什么时候重新加载集合视图?请使用array 而不是硬编码变量。 @MishaVyrko 是的,我做了,但我没有包含在问题中以使其更易于理解,甚至 super.view 确实 load 包含在我的代码中但忘记包含在问题中。跨度> @Rob 当我重新加载集合视图时,它给我一个错误,说“sliderimage 不符合编码标准”。 【参考方案1】:

在您填写 imgArray 的行之后,在您的收藏视图中调用 reloadData()

【讨论】:

以上是关于如何将数组中的非静态图像加载到 Swift 中的集合视图中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中

如何使用 swift 将 Images.xcassets 中的图像加载到 UIImage 中

在 Swift 中将图像和标题从数组(image_url)迭代和加载到 ViewController 中的正确方法

将 plist 加载到核心数据中

Swift中的像素数组到UIImage

使用静态库中的图像