เซลล์ 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 as? 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