Как отключить автоматический размер для определенной ячейки элемента в UICollectionView - PullRequest
0 голосов
/ 29 апреля 2019
 override func viewDidLoad(){
       let layout = UICollectionViewFlowLayout()
       collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
            flowLayout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
        }

}

выше код работает хорошо, как я ожидал.

но мне нужно для 1-го элемента полной ширины, но он больше не работает и дают мне исключение.

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 не определено.

Не могли бы вы сказать мне, как я могу сделать 1-й элемент полной ширины, другой элемент сохранить 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)
   } 
...