swift - 获取数据时 UICollectionView 不更新

标签 swift uicollectionview uikit

有人可以帮忙吗?函数 fetchUser() 正在运行,我看到用户正在加载,但 Collection View 的单元格没有出现。它也是以编程方式进行的。

Collection View 是:

let newCollection: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    let collection = UICollectionView(frame: CGRect(x: 0, y: 0, width: 0, height: 0), collectionViewLayout: layout)
    layout.scrollDirection = .horizontal
    collection.backgroundColor = UIColor.green
    collection.translatesAutoresizingMaskIntoConstraints = false
    collection.isScrollEnabled = true
    return collection
}()

配置的 Collection View 单元格是:

extension WorkerUICollection: UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return worker.count
    }

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! CustomeCell
        let cellUsers = worker[indexPath.item]
        cell.textLabel.text! = cellUsers.workerName
        //cell.workerLocation.text! = "2.0 km"
        cell.backgroundColor  = .white
        cell.layer.cornerRadius = 5
        cell.layer.shadowOpacity = 3
        //cell.imageView.image = UIImage(named: "user")
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 150, height: 250)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 3, left: 3, bottom: 3, right: 3)
    }

}

fetchUser() 函数:

func fetchUser() {
    Database.database().reference().child("Users").observe(DataEventType.childAdded, with: { (snapshot) in
        if let dictionary = snapshot.value as? [String: AnyObject] {
            let worker = WorkerInfo()
            worker.workerName = (dictionary["username"] as! String?)!
            //user.profileImageURL = dictionary["profileImageURL"] as! String?
            DispatchQueue.main.async(execute: {
                self.newCollection.reloadData()
            })
        }
        print(snapshot)
    }, withCancel: nil)
}

有什么想法吗?

最佳答案

因为您的 self.worker.count = 0。在您的 fetchUser() 函数中,您应该使用数据库中的新数据源(worker)来更新数据源(worker)。尝试这样的事情。

if let array = snapshot.value as? [String: AnyObject] {
   var tempWorkersArray: [WorkerInfo] = []

   for dict in array {
        let worker = WorkerInfo()
        worker.workerName = (dict["username"] as? String) ?? ""
        tempWorkersArray.append(worker)
   }
   self.worker = tempWorkersArray

   DispatchQueue.main.async {
       self.newCollection.reloadData()
   }
}

关于swift - 获取数据时 UICollectionView 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469678/

相关文章:

ios - 在播放音频时保持 UIButton 处于选中状态

ios - 第二个选项卡中的 UICollectionView 导致第一个选项卡中的 UICollectionView 崩溃应用程序

ios - 点击时切换 UICollectionView Cell 的选择/取消选择状态 - Swift

ios - TableView 标题像搜索栏一样隐藏

swift - 使用 RxSwift 的分页 API 调用

ios - ios 11 中导航栏中的后退按钮无法被点击

ios - 什么时候在 ios 中选择 serialQueue 而不是并发队列

ios - Swift:除了图像之外,所有内容都从 web 加载到 collectionViewCell 中

ios - 如何在另一个 NavigationLink 中包含一个 NavigationLink

ios - 没有 Interface Builder 的自定义 UITabBar 子类