UICollectionViewDiffableDataSource ChatLayout เป็นทางเลือกอื่นสำหรับ MessageKit มันใช้ UICollectionViewLayout ที่กำหนดเองเพื่อให้คุณควบคุมงานนำเสนอได้อย่างเต็มที่รวมถึงเครื่องมือทั้งหมดที่มีอยู่ใน UICollectionView
UICollectionView ระหว่างการอัปเดต ChatLayout เป็น UICollectionViewLayout ที่กำหนดเองดังนั้น:
คุณไม่จำเป็นต้องขยายหรือแทนที่ UIViewController ที่กำหนดเองหรือ UICollectionView คุณต้องยกตัวอย่างพวกเขาด้วยตัวเองและใช้พวกเขาในแบบที่คุณต้องการ
ChatLayout ไม่พึ่งพา UICollectionViewFlowLayout ที่ได้รับการแก้ไขและไม่หมุน UICollectionView ของคุณ ซึ่งหมายความว่าคุณสามารถใช้มุมมองของคุณราวกับว่าพวกเขาจะเป็นเซลล์ปกติภายใน UICollectionView คุณสามารถได้รับประโยชน์จากการใช้การใช้งาน UIKit เริ่มต้นของ adjustedContextInsets (และอื่น ๆ ) เนื่องจากคอนโทรลเลอร์มุมมองของคุณเป็นคอนโทรลเลอร์มุมมองปกติโดยไม่มีการแฮ็กหรือกลเม็ดใด ๆ
ChatLayout ไม่ต้องการให้คุณคำนวณขนาดเซลล์ทั้งหมดก่อนที่จะแสดงผลบนหน้าจอ คุณสามารถใช้ข้อ จำกัด การวางอัตโนมัติได้อย่างเต็มที่และพึ่งพาความจริงที่ว่าขนาดที่ถูกต้องจะถูกคำนวณในรันไทม์ อย่างไรก็ตาม ChatLayout เป็น UICollectionViewLayout อื่น ๆ จะได้รับประโยชน์จากคุณให้ขนาดโดยประมาณของเซลล์ของคุณเนื่องจากจะช่วยให้คุณมีประสิทธิภาพที่ดีขึ้น
ChatLayout ไม่ได้บังคับให้คุณใช้รูปแบบข้อมูลเฉพาะใด ๆ คุณสามารถจัดเก็บข้อความของคุณและอัปเดต UICollectionView ตามที่คุณต้องการ สิ่งเดียวที่คุณต้องการคือการเคารพขอบเขตธรรมชาติที่ UICollectionView มีและใช้ UICollectionViewDataSource อย่างถูกต้อง แอปตัวอย่างใช้ DifferenceKit เพื่อประมวลผลการเปลี่ยนแปลงในรูปแบบข้อมูล
ChatLayout ไม่ได้บังคับให้คุณใช้ UIView ใด ๆ ที่เฉพาะเจาะจงเพื่อสร้างเซลล์คอลเลกชันของคุณ คุณสามารถสร้างพวกเขาในแบบที่คุณต้องการ อาจเป็น UICollectionViewCell หรือ UICollectionReusableView มี UIView ทั่วไปบางส่วนรวมกับห้องสมุดที่อาจช่วยให้คุณสร้างได้เร็วขึ้น อย่างไรก็ตามคุณไม่จำเป็นต้องใช้พวกเขา
ChatLayout ไม่ได้จัดการกับพฤติกรรมการปรากฏตัวของแป้นพิมพ์ คุณต้องนำไปใช้กับตัวเองตั้งแต่เริ่มต้นหรือใช้ห้องสมุดที่คุณใช้อยู่แล้วในโครงการของคุณ มันช่วยให้คุณสามารถควบคุมงานนำเสนอแป้นพิมพ์ได้อย่างเต็มที่ สิ่งเดียวที่คุณต้องทำคืออัปเดต contentInsets ของ UICollectionView ของคุณ
ChatLayout ไม่ได้ให้การควบคุมอินพุตใด ๆ แก่คุณ คุณสามารถใช้ใครก็ได้ที่คุณชอบและปรับแต่งตามที่คุณต้องการ ตัวอย่างแอปตัวอย่างใช้ InputBarAccessoryView
ในการเรียกใช้โครงการตัวอย่างให้โคลน repo และเรียกใช้ pod install จากไดเรกทอรีตัวอย่างก่อน
ChatLayout มีให้บริการผ่าน Cocoapods, Carthage และ Swiftpm ดูแอป Example สำหรับรายละเอียดการใช้งาน
หากคุณใช้ cocoapods คุณสามารถติดตั้งแพ็คเกจทั้งหมดโดยใช้ pod 'ChatLayout' หากคุณไม่ต้องการส่วนประกอบเพิ่มเติมที่ให้ไว้คุณสามารถติดตั้งเฉพาะเลย์เอาต์โดยใช้ pod 'ChatLayout/Core'
ChatLayout กำลังพัฒนาอย่างแข็งขันและเรายินดีต้อนรับการมีส่วนร่วมของคุณ
หากคุณต้องการมีส่วนร่วมในการซื้อคืนนี้โปรดอ่านแนวทางการบริจาค
UICollectionViewDiffableDataSource ChatLayout สามารถประมวลผลคำสั่งการอัปเดตใด ๆ ที่คุณส่งไปยัง UICollectionView ของคุณเพื่อให้คุณสามารถใช้ UICollectionViewDiffableDataSource ได้เช่นกัน
มันอาจเป็นการล่อลวงและอาจดูเหมือนว่าเป็นวิธีที่ถูกต้อง แต่ อย่า ใช้มุมมองเพิ่มเติมเพื่อตกแต่งข้อความหรือกลุ่มของคุณ UICollectionView ประมวลผลตามลำดับอื่น: UICollectionViewCell S ครั้งแรกและหลังจากสลับเป็น UICollectionReusableView S คุณมักจะต้องเผชิญกับพฤติกรรมที่ไม่คาดคิดระหว่างแอนิเมชั่น ฉันขอแนะนำคุณเกี่ยวกับการใช้ส่วนเลย
ChatLayout สามารถใช้ร่วมกับพื้นผิวเพื่อปรับปรุงประสิทธิภาพการวางอัตโนมัติ แต่โปรดจำไว้ว่ามันเป็น wrapper เริ่มต้นที่ยากที่จะทำงานเฉพาะกับ UICollectionViewFlowLayout ดูปัญหา คุณจะต้องใช้ ChatLayoutDelegate ตัวเองและเผยแพร่ขนาดโหนดด้วยตนเอง
หากคุณเห็นภาพเคลื่อนไหวที่แปลกหรือไม่คาดคิดในระหว่างการอัปเดตให้ตรวจสอบรูปแบบข้อมูลของคุณและ คำสั่งที่คุณส่งไปยัง UICollectionView ของ performBatchUpdates โดยเฉพาะถ้าคุณใช้อัลกอริทึมการกระจายบางอย่างเช่น DifferentKit เป็นไปได้มากที่คุณจะส่งคำสั่งลบ/แทรกเมื่อคุณคาดว่าจะเห็นการโหลดซ้ำ วิธีที่ง่ายที่สุดในการตรวจสอบคือการเพิ่ม print("(updateItems)") ลงใน ChatLayout.prepare(forCollectionViewUpdates:) วิธีการ ChatLayout ไม่รู้ว่าคุณคาดหวังอะไร มันเพียงแค่ประมวลผลการเปลี่ยนแปลงของคุณตามคำสั่งที่ได้รับ
ส่วนหัวหรือส่วนท้ายที่เหนียวไม่ได้รับการสนับสนุนโดย ChatLayout แต่ยินดีต้อนรับการมีส่วนร่วมของคุณ
ChatLayout มีการแจกจ่ายภายใต้ใบอนุญาต MIT
ChatLayout มีไว้สำหรับการใช้งานของคุณโดยไม่เสียค่าใช้จ่ายโดยไม่เสียค่าใช้จ่าย เราไม่รับประกันสัญญาหรือขอโทษ นักพัฒนาข้อแม้
ภาษาอังกฤษ:
รัสเซีย:
หากคุณพบว่าห้องสมุดนี้มีประโยชน์และโดยเฉพาะอย่างยิ่งหากคุณใช้งานในการผลิตโปรดพิจารณาสนับสนุนโครงการนี้ที่นี่ ฉันทำงานกับ ChatLayout ในเวลาว่างและการสนับสนุนของคุณจะช่วยให้ฉันพัฒนาและมีส่วนร่วมในชุมชนโอเพ่นซอร์สต่อไป การสนับสนุนของคุณจะช่วยให้ฉันสามารถอุทิศเวลาและทรัพยากรให้กับโครงการนี้ได้มากขึ้นเพื่อให้มั่นใจว่ามันยังคงเป็นปัจจุบันและเกี่ยวข้องกับปีต่อ ๆ ไป
ขอบคุณสำหรับการพิจารณาของคุณ!
Evgeny Kazaev, [email protected] Twitter Ekazaev
ฉันยินดีที่จะตอบคำถามใด ๆ ที่คุณอาจมี เพียงสร้างปัญหาใหม่