UICollectionViewDiffableDataSource ChatLayout هو حل بديل لـ MessageKit. يستخدم UICollectionViewLayout المخصص لتوفير التحكم الكامل في العرض التقديمي بالإضافة إلى جميع الأدوات المتوفرة في UICollectionView .
UICollectionView أثناء التحديثات. ChatLayout هو UICollectionViewLayout المخصص ، لذلك:
ليس عليك تمديد أو تجاوز أي UIViewController المخصص أو UICollectionView . تحتاج إلى إنشاء مثيل لها بنفسك واستخدامها بالطريقة التي تريدها.
لا يعتمد ChatLayout على UICollectionViewFlowLayout المعدل ولا يدور UICollectionView رأسًا على عقب. هذا يعني أنه يمكنك استخدام وجهات نظرك كما لو كانت خلايا منتظمة داخل UICollectionView . يمكنك الاستفادة من استخدام تطبيقات UIKit الافتراضية لـ adjustedContextInsets (وغيرها) لأن وحدة تحكم العرض الخاصة بك هي وحدة تحكم عرض عادية دون أي اختراقات أو حيل.
لا يتطلب منك ChatLayout حساب جميع أحجام الخلايا قبل أن يعرضها على الشاشة. يمكنك استخدام قيود الطبقات التلقائية بالكامل والاعتماد على حقيقة أنه سيتم حساب الحجم الصحيح في وقت التشغيل. ومع ذلك ، ChatLayout حيث أن أي UICollectionViewLayout ستستفيد منك توفير الأحجام المقدرة لخلاياك لأنها ستسمح لك بالحصول على أداء أفضل.
لا يفي بك ChatLayout باستخدام أي نموذج بيانات محدد. يمكنك تخزين رسائلك وتحديث UICollectionView بالطريقة التي تريدها. الشيء الوحيد الذي تحتاجه هو احترام الحدود الطبيعية التي لدى UICollectionView وتنفيذها بشكل صحيح UICollectionViewDataSource . يستخدم تطبيق المثال الفارق لمعالجة التغييرات في نموذج البيانات.
لا يفرضك ChatLayout على استخدام أي UIView S محددة لإنشاء خلايا التجميع الخاصة بك. يمكنك إنشاءها بالطريقة التي تريدها. يمكن أن يكون أي UICollectionViewCell أو UICollectionReusableView . هناك بعض UIView العام المغطى بالمكتبة التي قد تساعدك على بنائها بشكل أسرع. ومع ذلك ، ليس عليك استخدامها.
لا يتعامل ChatLayout مع سلوك مظهر لوحة المفاتيح. يجب عليك تنفيذ ذلك بنفسك من نقطة الصفر أو استخدام المكتبة التي تستخدمها بالفعل في مشروعك. يمنحك التحكم الكامل في عرض لوحة المفاتيح. الشيء الوحيد الذي عليك فعله هو تحديث contentInsets UICollectionView الخاص بك.
ChatLayout لا يوفر لك أي عنصر تحكم في الإدخال. يمكنك استخدام أي شخص تريده وتخصيصه بالطريقة التي تريدها. يستخدم تطبيق المثال على سبيل المثال InportBarAccessoryView.
لتشغيل Project Example ، استنساخ REPO ، وتثبيت pod install من الدليل المثال أولاً.
يتوفر ChatLayout من خلال Cocoapods و Carthage و SwiftPM. انظر تطبيق Example لتفاصيل الاستخدام.
إذا كنت تستخدم Cocoapods ، فيمكنك تثبيت الحزمة بأكملها باستخدام pod 'ChatLayout' . إذا لم تكن بحاجة إلى المكونات الإضافية المقدمة ، فيمكنك تثبيت التخطيط نفسه فقط باستخدام pod 'ChatLayout/Core'
ChatLayout في التطوير النشط ، ونحن نرحب بإسهاماتك.
إذا كنت ترغب في المساهمة في هذا الريبو ، فيرجى قراءة إرشادات المساهمة.
UICollectionViewDiffableDataSource يمكن ChatLayout معالجة أي أوامر تحديث ترسلها إلى UICollectionView ، حتى تتمكن من استخدام UICollectionViewDiffableDataSource أيضًا.
قد يكون الأمر مغريًا وقد يبدو أنه هو الطريق الصحيحة للذهاب ، ولكن لا تستخدم طرق العرض التكميلية لتزيين رسائلك أو مجموعات منها. يعالجها UICollectionView بترتيب مختلف: UICollectionViewCell s أولاً وفقط بعد التبديل إلى UICollectionReusableView . من المرجح أن تواجه بعض السلوك غير المتوقع أثناء الرسوم المتحركة. أنصحك بقوة ضد استخدام الأقسام على الإطلاق.
يمكن استخدام ChatLayout مع الملمس لتحسين أداء الطبق التلقائي. ولكن ضع في اعتبارك أن الغلاف الافتراضي متشددين للعمل بشكل حصري مع UICollectionViewFlowLayout . انظر القضية. سيتعين عليك تنفيذ ChatLayoutDelegate بنفسك ونشر حجم العقدة يدويًا.
إذا رأيت رسومًا متحركة غريبة أو غير متوقعة أثناء التحديثات ، فتحقق من نموذج البيانات الخاص بك والأوامر التي ترسلها إلى UICollectionView performBatchUpdates . خاصة إذا كنت تستخدم بعض خوارزميات الاختلاف مثل الفرق. من المحتمل جدًا أن ترسل أوامر حذف/إدراج عندما تتوقع رؤية إعادة التحميل. أسهل طريقة للتحقق من ذلك هي إضافة print("(updateItems)") في ChatLayout.prepare(forCollectionViewUpdates:) . لا يعرف ChatLayout ما تتوقع رؤيته. إنه يعالج التغييرات الخاصة بك وفقًا للأوامر التي تلقاها.
لا يتم دعم الرؤوس اللزجة أو التذييلات من قبل ChatLayout ولكن مساهماتك مرحب بها.
يتم توزيع ChatLayout تحت رخصة معهد ماساتشوستس للتكنولوجيا.
يتم توفير ChatLayout لاستخدامك ، مجانًا ، على أساس ما. نحن لا نقدم أي ضمانات أو وعود أو اعتذارات. مطور التحذير.
إنجليزي:
الروسية:
إذا وجدت هذه المكتبة مفيدة ، وخاصة إذا كنت تستخدمها في الإنتاج ، فيرجى التفكير في رعاية هذا المشروع هنا. أعمل على ChatLayout في أوقات فراغي ، وسوف تساعدني رعايتك على مواصلة التطوير والمساهمة في مجتمع المصدر المفتوح. سيمكنني دعمك من تكريس المزيد من الوقت والموارد لهذا المشروع ، مما يضمن أنه لا يزال محدثًا وذات صلة لسنوات قادمة.
شكرا لك على اهتمامك!
Evgeny Kazaev ، [email protected]. تويتر ekazaev
يسعدني الإجابة على أي أسئلة قد تكون لديكم. فقط قم بإنشاء مشكلة جديدة.