Sel tampilan koleksi untuk baris di jalur indeks tidak dipanggil untuk bagian berikutnya jika tinggi sel bagian saat ini adalah nol

Saya menemukan masalah dalam tampilan koleksi di proyek kami -

  1. Tampilan Koleksi terdiri dari 4 bagian. Setiap bagian terdiri dari 1 sel.

  2. Jika kita mempertahankan tinggi nol untuk sel tampilan koleksi di bagian 0, jalur indeks sel untuk baris tidak akan dipanggil untuk bagian nol. Masalah yang kita hadapi adalah cellforrowatindexapath tidak akan dipanggil untuk bagian selanjutnya juga. Tampilan koleksi tidak akan menampilkan apa pun di layar meskipun ketinggian sel bagian lain disediakan.

Diperbarui:

 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()
      }
}

Jika ada yang lebih memahami mengapa tampilan koleksi berfungsi dengan cara ini, harap beri tahu saya.


person Pratibha Shetty    schedule 19.11.2019    source sumber
comment
Harap edit jawaban Anda untuk menambahkan metode collectionView yang relevan.   -  person flanker    schedule 19.11.2019
comment
menambahkan metode yang relevan   -  person Pratibha Shetty    schedule 19.11.2019
comment
Apakah pengontrol tampilan Anda sesuai dengan UICollectionViewDataSource dan UICollectionViewDelegateFlowLayout?   -  person Shahrukh Malik    schedule 19.11.2019


Jawaban (3)


Jika Anda menggunakan storyboard, coba ubah Estimate Size Tampilan Koleksi menjadi Tidak Ada di bagian Pemeriksa Ukuran.

Silakan periksa:

tangkapan layar

person kseniiap    schedule 19.11.2019
comment
Ini mungkin jawaban yang benar, karena saya tidak dapat mereproduksi masalah - sel-selnya terlihat sampai saya mengubah Estimasi Ukuran menjadi Tidak Ada, kemudian sel-sel tersebut menghilang. Sama ketika menyetel nilai ini secara terprogram: (self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize = CGSize(width: 1, height: 1) berhasil dan menyetelnya ke CGSize.zero membuatnya rusak lagi. - person bevoy; 19.11.2019
comment
Perkiraan ukuran tampilan koleksi tidak hanya ada di storyboard. Menyetel (self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.estimatedItemSize secara terprogram akan membuat ukuran dihitung dari batasan tata letak otomatis. - person Pratibha Shetty; 20.11.2019

Saya pernah mengalami masalah serupa. Ini mungkin diselesaikan dengan mengembalikan CGFloat.leastNonzeroMagnitude atau 0,1, bukan 0.

person Arik Segal    schedule 19.11.2019
comment
Kami mencoba menggunakan CGFloat.leastNonzeroMagnitude, sayangnya tidak berhasil. Ini berfungsi dengan baik jika kita mengembalikan ketinggian 0,1. Bisakah Anda menjelaskan alasan di balik perilaku tampilan koleksi tersebut? - person Pratibha Shetty; 19.11.2019

Tambahkan ini di viewDidLoad():

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

Sekarang sizeForItemAt dan cellForItemAt akan dipanggil untuk bagian tambahan Anda.

person DonMag    schedule 19.11.2019