首页 > 解决方案 > 如何禁用 UICollectionView 中特定项目单元格的自动大小

问题描述

 override func viewDidLoad(){
       let layout = UICollectionViewFlowLayout()
       collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
        }

}

上面的代码按我的预期运行良好。

但我需要第一项全宽但它不再工作并给我例外。

extension  WordViewController : UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if indexPath.item == 0{
        return  CGSize(width: self.collectionView.frame.width, height: 100)

    }
    return  UICollectionViewFlowLayout.automaticSize
} 

例外 :

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UICollectionViewLayoutAttributes: -setFrame: with CGRectNull is undefined。

你能告诉我如何让第一个项目全宽其他项目保持UICollectionViewFlowLayout.automaticSize

更新:

如果注释掉流线:

   // if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    //    flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
    // }

然后以这种方式制作然后工作正常。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if indexPath.item == 0{
        return CGSize(width: self.view.frame.width - 20, height: 100)

    }
   return CGSize(width: 100, height: 100)
   } 

标签: swiftuicollectionviewuicollectionviewcell

解决方案


推荐阅读