首页 > 解决方案 > 我正在尝试从服务器获取数据,但它没有进入集合视图:请看一下

问题描述

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        
        getDataFromJSON()
        
        let numberOfItemsPerRow:CGFloat = 2
        let spacingBetweenCells:CGFloat = 25
        
        let totalSpacing = (2 * 10) + ((numberOfItemsPerRow - 1) * spacingBetweenCells) //Amount of total spacing in a row
        
        if let collection = self.collectionView{
            let width = (collection.bounds.width - totalSpacing)/numberOfItemsPerRow
            return CGSize(width: width, height: width)
        }else{
            return CGSize(width: 0, height: 0)
        }
    }

我在集合视图方法中调用服务器但仍然不起作用?

标签: iosswiftuicollectionview

解决方案


您应该从 sizeForItemAt 方法中删除 getDataFromJSON() 调用,并将其放置到 ViewController 的 viewWillAppear() 方法中。

如果您要从服务器下载数据,它将是异步的。这意味着您的应用必须等到完成下载,然后重新加载您的收藏视图的显示。或任何其他消耗下载数据的视图。

所以在概念上:

  1. 根据客户的需要,开始在 viewWillAppear() 或 viewDidLoad() 中下载数据
  2. 下载完成后,重新加载 collectionView 和任何其他正在消耗刚刚下载的数据的视图

推荐阅读