在 cellForItemAt collection 中,视图未通过 swift 中的 collectionView.reloadData() 更新 indexPath 3
In cellForItemAt collection view is not updating indexPath by collectionView.reloadData() in swift 3
我实际上想用行和列创建 table 并使用 UICollectionView 执行此操作。问题在于重新加载或更新 collectionView 以在我的 table 中添加或删除行。列和硬编码 i-e 4.
我就是这样做的;
- 从故事板创建 CollectionView
- 加载页面后。命中路由获取数据
- 获取数据后将获取的数据保存在数组中object。
- 通过 collectionView.reloadData() 使用数组大小更新 collection 视图。
从这里开始。
将故事板中的 collection 视图引用到我的 viewController
@IBOutlet weak var collectionView: UICollectionView!
然后在 "viewDidLoad".
self.collectionView.delegate = self
self.collectionView.dataSource = self
现在从服务器得到响应后。我正在更新我的数组,我从中获取要创建的行数。之后这就是我重新加载 collectionView.
的方式
DispatchQueue.main.async
{
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
print("size of the array is(self.portfolioHandler.data.count)")
}
在我的 numberOfSections 函数中。我得到正确数量的细胞来创建。也回来了
func numberOfSections(in collectionView: UICollectionView) -> Int {
var toReturn : Int = 1
if (self.portfolioHandler != nil) {
let data : [PortfolioData] = self.portfolioHandler.data!
print("dataCount : \(data.count)")
toReturn = data.count + 1
print("toReturn : \(toReturn)")
}
return toReturn
}
通过日志,我得到了返回的号码。正确并正确返回数据。
现在在我的 cellForItem At index 函数中。 IndexPath 没有更新。它仍然是 1. 我正在创建的顶部 header。它下面没有单元格。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCollectionViewCell
print("section: \(indexPath.section) && row: \(indexPath.row)")
在我尝试了一切之后。没有什么可以帮助我在 collectionView 中创建正确的单元格。
一招奏效。仅当我在开始时在 numberOfSections 中给出硬编码值。然后在服务器响应并重新加载 collectionView 之后,它将创建像我在上面硬编码的 3 或 4 个单元格。仅此而已。
但我必须创建从服务器获取的单元格数量。动态.
我花了很多时间在上面。请在我错的地方帮助我。或者我该如何解决这个问题。
在所有尝试之后。我无法解决这个集合视图的重新加载问题。
但我在我的应用程序中通过这个技巧来处理这个问题
集合视图第一次正确制作单元格。问题在于重新加载。所以在来到这个视图控制器之前,我在以前的视图控制器中发出了我的服务器请求。并将响应发送到此视图控制器。这条路。我有很多细胞要制作。所以它起作用了。
但作为一名学习者,我期待着这个重新加载问题的答案和真正的解决方案。
我将不胜感激。虽然感谢@ɯɐɹʞ的评论。
我实际上想用行和列创建 table 并使用 UICollectionView 执行此操作。问题在于重新加载或更新 collectionView 以在我的 table 中添加或删除行。列和硬编码 i-e 4.
我就是这样做的;
- 从故事板创建 CollectionView
- 加载页面后。命中路由获取数据
- 获取数据后将获取的数据保存在数组中object。
- 通过 collectionView.reloadData() 使用数组大小更新 collection 视图。
从这里开始。 将故事板中的 collection 视图引用到我的 viewController
@IBOutlet weak var collectionView: UICollectionView!
然后在 "viewDidLoad".
self.collectionView.delegate = self
self.collectionView.dataSource = self
现在从服务器得到响应后。我正在更新我的数组,我从中获取要创建的行数。之后这就是我重新加载 collectionView.
的方式DispatchQueue.main.async
{
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
print("size of the array is(self.portfolioHandler.data.count)")
}
在我的 numberOfSections 函数中。我得到正确数量的细胞来创建。也回来了
func numberOfSections(in collectionView: UICollectionView) -> Int {
var toReturn : Int = 1
if (self.portfolioHandler != nil) {
let data : [PortfolioData] = self.portfolioHandler.data!
print("dataCount : \(data.count)")
toReturn = data.count + 1
print("toReturn : \(toReturn)")
}
return toReturn
}
通过日志,我得到了返回的号码。正确并正确返回数据。
现在在我的 cellForItem At index 函数中。 IndexPath 没有更新。它仍然是 1. 我正在创建的顶部 header。它下面没有单元格。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCollectionViewCell
print("section: \(indexPath.section) && row: \(indexPath.row)")
在我尝试了一切之后。没有什么可以帮助我在 collectionView 中创建正确的单元格。
一招奏效。仅当我在开始时在 numberOfSections 中给出硬编码值。然后在服务器响应并重新加载 collectionView 之后,它将创建像我在上面硬编码的 3 或 4 个单元格。仅此而已。
但我必须创建从服务器获取的单元格数量。动态.
我花了很多时间在上面。请在我错的地方帮助我。或者我该如何解决这个问题。
在所有尝试之后。我无法解决这个集合视图的重新加载问题。
但我在我的应用程序中通过这个技巧来处理这个问题
集合视图第一次正确制作单元格。问题在于重新加载。所以在来到这个视图控制器之前,我在以前的视图控制器中发出了我的服务器请求。并将响应发送到此视图控制器。这条路。我有很多细胞要制作。所以它起作用了。
但作为一名学习者,我期待着这个重新加载问题的答案和真正的解决方案。
我将不胜感激。虽然感谢@ɯɐɹʞ的评论。