首页 > 解决方案 > 返回故事板单元格大小或忽略 sizeForItemAt 委托方法上的集合视图

问题描述

我在另一篇文章中看到了这个问题,但是答案并不令人满意。

我有一个视图控制器,里面有几个集合视图,我用故事板完美地调整了它们的单元格。但是,有一个特别需要手动调整大小的集合视图,因此我包含了该方法:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

我想要完成的是覆盖或忽略所有集合视图的此方法,但最后一个。

我尝试使用另一篇文章中建议的以下代码,但它在运行时崩溃:

if collectionView != interestsCollectionView {
            return self.collectionView(collectionView, layout: UICollectionViewLayout(), sizeForItemAt: IndexPath(item: 0, section: 0))
        }

关于我如何做到这一点的任何想法?

标签: iosswift

解决方案


我猜这个

 return self.collectionView(collectionView, layout: UICollectionViewLayout(), sizeForItemAt: IndexPath(item: 0, section: 0))

将多次递归调用相同的方法,导致循环导致崩溃,此外,如果您实现了此方法,sizeForItemAt那么您还必须为其他集合返回一个值,因为if这里if collectionView != interestsCollectionView 可能永远不会从编译器逻辑中命中,所以您可能会

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
  if collectionView == collectionView1 {
     return CGSize(width:<#w#>,height:<#h#>)
  }
  else if collectionView == collectionView2 {
     return CGSize(width:<#w#>,height:<#h#>)
  }
  else { } // etc
}

推荐阅读