如何为UICollectionView中的特定项目单元格禁用automaticSize

时间:2019-04-29 04:08:57

标签: swift uicollectionview uicollectionviewcell

 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:与CGRectNull是   未定义。

您能告诉我如何使第一件商品的全宽其他商品保持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)
   } 

0 个答案:

没有答案