ios - 我正在尝试从服务器获取数据,但它没有进入集合视图:请看一下
问题描述
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)
}
}
我在集合视图方法中调用服务器但仍然不起作用?
解决方案
您应该从 sizeForItemAt 方法中删除 getDataFromJSON() 调用,并将其放置到 ViewController 的 viewWillAppear() 方法中。
如果您要从服务器下载数据,它将是异步的。这意味着您的应用必须等到完成下载,然后重新加载您的收藏视图的显示。或任何其他消耗下载数据的视图。
所以在概念上:
- 根据客户的需要,开始在 viewWillAppear() 或 viewDidLoad() 中下载数据
- 下载完成后,重新加载 collectionView 和任何其他正在消耗刚刚下载的数据的视图
推荐阅读
- spring - 将 Spring 项目转换为 Spring Boot 时面临的问题
- c# - 将要求添加到默认 [授权] 策略
- python - 带有sklearn的python中的决策树将sklearn更改为使用c4.5
- flask - 错误:找不到 Flask 应用程序
- c++ - 如何防止 /* 创建评论块?
- java - 来自 Cosmos DB 的带有异步请求的 GoneException 的原因是什么?
- gnuradio - GNU Radio GFSK 调制和解调
- django - django-background-tasks 集成
- recursion - Prolog flatten/2 实现
- reactjs - 如何使用 React PropTypes 检查多个组件类类型?