
في هذه المقالة ، سأحاول الكشف عن بعض المراوغات في فئة UITableView وأريك الطرق الأسهل والأسهل لتنفيذ الرؤوس والتذييلات ذات الإرتفاع المتغير. بالنسبة لي ، البساطة هي عندما يتعلق الأمر بكتابة رمز واجهة المستخدم ، ولكن في الحقيقة لا يتم ترميز أي واجهة مستخدم. في هذه المقالة سأستفيد أكثر من باني الواجهة :)
سأتحدث عن الرؤوس ، ولكن الشيء نفسه ينطبق على الصفحات السفلية.

TableView الإعداد
لا تختلف الرؤوس في جدول أو نمط TableView البسيط عن أي صف UITableView آخر. الإعداد هو في الواقع بسيط جدا.
- يجب أن يتم تعيين
sectionHeaderHeight
و sectionHeaderHeight
. UITableView.automaticDimension
هو ما يسمح لـ AutoLayout بحساب ارتفاع كل خلية في وقت التشغيل.- يجب تعيينHeaderHeight لتقدير الارتفاع الكلي لمحتوياته تقريبًا لعرض مؤشر التمرير.
يمكن تعيين هذه الخصائص في Size Inspector عند تحديد TableView في لوحة العمل الخاصة بك.

إنشاء عرض رأس
tableView(_: viewForHeaderInSection: )
يجب أن يعرض نسخة UIView ، لكن ماذا؟ UITableViewCell هي فئة فرعية من UIView. هذا يعني أنه يمكننا استخدام لوحة العمل الخاصة بنا لإنشاء خلية نموذجية يمكن إزالتها وإعادتها من هذه الوظيفة. في رأيي ، هذه هي أفضل طريقة للإعلان عن جميع وجهات نظركم في مكان واحد ، بدلاً من العديد من ملفات xib المنتشرة حول مشروعك.

لقد أنشأت نموذجًا أوليًا للخلية يتكون من ImageView على اليسار وتعليق تسمية ووصف. في هذا المشروع ، لم يتم تعيين ارتفاع ثابت. نريد من التخطيط أن يحسب ارتفاع الخلية تلقائيًا بناءً على حجم محتوى التصنيف ، والذي سيتم تحديده في وقت التشغيل.
يتم وضع العلامات في StackView وتقتصر على الجوانب الأربعة لطريقة عرض محتوى الخلية. أفضل استخدام StackView عند إنشاء طرق عرض لتقليل عدد القيود.

لإرجاع العرض ، ندعو
dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell?
. لا نستخدم صيغة مختلفة لـ
forIndexPath:
لأننا لا نملك فهرسًا محددًا لخطوط الرأس. بالإضافة إلى ذلك ،
forIndexPath:
إلى أن معرف إعادة الاستخدام معرّف لخلية تم استبعادها من قائمة الانتظار لمنع عودة الصفر. في حالتنا ، قد يتم عرض القسم بدون عنوان.
guard let headerCell = tableView.dequeueReusableCell(withIdentifier: "header") else { return nil }
رؤوس القسم الفارغ
كما هو مخطط له ، إذا لم يتم تعريف رأس القسم في عرض الجدول بنمط المجموعة ، فسيقوم إطار العمل بعرض طريقة عرض فارغة بحجم 30 بكسل. قررت شركة آبل أنه سيكون من الغريب أن تبدو أقسام مختلفة كقسم واحد. لكن في بعض الأحيان نريد فقط كسر القواعد. :)
للتغلب على هذا ، يمكنك استخدام
CGFLOAT_MIN
الثابت. يمثل الحد الأدنى للقيمة غير السالبة لـ CGFloat. القيمة هي 1.17549435e-38F أو 2.2250738585072014e-308 للكود 32 بت و 64 بت ، على التوالي. في النهاية ، ليس الصفر بكسل. من ناحية أخرى ، في طريقة عرض جدول بسيطة ، يمكن ضبط ارتفاع الرأس على أي قيمة أكبر من أو تساوي 0.
لهذه الحالة الخاصة ، نحتاج إلى استخدام
tableView(_:heightForHeaderInSection:)
. كما هو موضح في الوثائق ، يجب تنفيذ وظيفتين لتحديد ارتفاع العرض المخصص.
استنتاج
لقد شعرت بالحيرة لرؤية الكثير من المتسللين على StackOverflow من أشخاص يريدون تطبيق رؤوس ذات ارتفاعات مختلفة. هذه خدعة بسيطة أستخدمها باستمرار عند العمل مع TableView ، وآمل أن تكون مفيدة لك بقدر ما هي مفيدة لي. ترميز جيد! :)