Ячейка Collectionview для строки по пути индекса не вызывается для последующих разделов, если высота ячейки текущего раздела равна нулю

Я столкнулся с проблемой в представлении коллекции в нашем проекте -

  1. Collectionview состоит из 4-х разделов. Каждая секция состоит из 1 ячейки.

  2. Если мы сохраним нулевую высоту для ячейки представления коллекции в разделе 0, cellforrrowatindexpath не будет вызываться для нулевого раздела. Проблема, с которой мы сталкиваемся, заключается в том, что cellforrowatindexapath также не будет вызываться для последующих разделов. В представлении коллекции ничего не отображается на экране, хотя предусмотрены другие высоты ячеек раздела.

Обновлено:

 func numberOfSections(in collectionView: UICollectionView) -> Int {
       return 3
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 1 
    }


 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
      Switch indexpath.section {
     case 0: return  CGSize(width: UIScreen.main.bounds.width, height: 0)
         case 1:  return CGSize(width: UIScreen.main.bounds.width, height: 200)
         case 2: return CGSize(width: UIScreen.main.bounds.width, height: 300)
      }
 }

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
 Switch indexpath.section {
     case 0: return A()
         case 1: return B()
         case 2: return C()
      }
}

Если кто-то лучше понимает, почему представление коллекции работает таким образом, дайте мне знать.


person Pratibha Shetty    schedule 19.11.2019    source источник
comment
Измените свой ответ, чтобы добавить соответствующие методы collectionView.   -  person flanker    schedule 19.11.2019
comment
добавлены соответствующие методы   -  person Pratibha Shetty    schedule 19.11.2019
comment
Соответствует ли ваш контроллер представления UICollectionViewDataSource и UICollectionViewDelegateFlowLayout?   -  person Shahrukh Malik    schedule 19.11.2019


Ответы (3)


Если вы используете раскадровку, попробуйте изменить Estimate Size представления коллекции на Нет в разделе «Инспектор размеров».

Пожалуйста, проверьте:

скриншот

person kseniiap    schedule 19.11.2019
comment
Это может быть правильный ответ, поскольку мне не удалось воспроизвести проблему - ячейки были видны, пока я не изменил расчетный размер на «Нет», после чего они исчезли. То же самое и при программной установке этого значения: (self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize = CGSize(width: 1, height: 1) выполнил фокус, а установка CGSize.zero снова сломала его. - person bevoy; 19.11.2019
comment
Предполагаемый размер Collectionview отсутствует только в раскадровке. Установка (self.collectionView.collectionViewLayout как? UICollectionViewFlowLayout) ?. EstimatedItemSize программно сделает размер для расчета из ограничений автоматического макета. - person Pratibha Shetty; 20.11.2019

Однажды у меня была похожая проблема. Это можно решить, вернув CGFloat.leastNonzeroMagnitude или 0,1 вместо 0.

person Arik Segal    schedule 19.11.2019
comment
Мы пробовали использовать CGFloat.leastNonzeroMagnitude, к сожалению, это не сработало. Он отлично работает, если мы вернем 0,1 высоты. Не могли бы вы объяснить причину такого поведения представления коллекции? - person Pratibha Shetty; 19.11.2019

Добавьте это в viewDidLoad():

    if let fl = theCollectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        fl.estimatedItemSize = CGSize(width: 1, height: 1)
    }

Теперь для ваших дополнительных разделов будут вызываться sizeForItemAt и cellForItemAt.

person DonMag    schedule 19.11.2019