ارتفاع ديناميكي UICollectionViewCell مع تصنيفين ديناميكيين وتخطيط تلقائي

0

لدي فئة فرعية UICollectionViewCell تم إعدادها مع خلية نموذجية وقيود (يتم توصيل كل عرض رأسيًا وأفقيًا).

لدي تصنيفان يمكن أن يختلفا في الحجم ، يمكن أن يكونا سطرًا واحدًا أو سطرين. تحقيقا لهذه الغاية ، قمت بتعيين اثنين من قيود الارتفاع على كل تسمية ، واحد مع أكبر أو يساوي (16 أو 20 حسب الملصق) وأقل من أو يساوي (32 أو 40 حسب الملصق).

يتم تعيين عدد الأسطر الموجودة على التسميات على 0. (على الرغم من أنني جربت مجموعة متنوعة من الإعدادات).

نظرًا لأنني استخدمت التخطيط التلقائي والقيود لإعداد العرض ، فقد حددت عرضًا في عرض المحتوى في تنبيه الخلية من AwesomeFromNib ()

override func awakeFromNib() {
        NSLayoutConstraint.activate([contentView.widthAnchor.constraint(equalToConstant: 341)])
        super.awakeFromNib()
        configureBorder()
}

في تخطيط collectionView ، قمت بتحديد ثابت البعد التلقائي لـ EstimItemSize & itemSize

if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
    flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
    flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
}

مع فكرة استخدام السيارات تخطيط أنا لم تنفذ مندوب عن وجهة نظر المجموعة.

أواجه تخطيطًا غير متناسق للغاية ، وفي بعض الحالات ستظهر الخلية كما أريدها ، وفي حالات أخرى يتم اقتطاع التصنيفات ، وفي حالات أخرى تكون التصنيفات ضيقة للغاية وتعرض النص على ثلاثة أسطر.

لقد حاولت أشياء كثيرة ، بما في ذلك الاتصال .sizeToFit() على كل تسمية بعد تعيين خاصية النص ، بالإضافة إلى الاتصال .setNeedsDisplay() قبل أن تعود الخلية من cellForItemAt

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

1 إجابة

1
افضل جواب
flowLayout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
flowLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize

بالطبع أنا على دراية بمزاعم Apple المتكررة بأن UICollectionViewCell في تخطيط التدفق يمكن أن يكون حجمًا ذاتيًا استنادًا إلى القيود الداخلية. لكنني لم أر قط رمز عمل من شركة Apple يوضح هذه الميزة ، ولم أنجح مرة واحدة في تأكيد هذه الادعاءات بأنها صحيحة. لا أعتقد أن هناك شيئًا مثل خلية تحجيم ذاتي. لسنوات ، أدت محاولة الحصول على خلية لتكون ذاتية الحجم إلى تعطل. في iOS 10 ، توقف التعطل في الغالب ، ولكن الآن لم يكن تخطيط التدفق يخطط الخلايا بشكل صحيح (والذي يبدو مثل ما تراه).

بطبيعة الحال ، لقد قدمت أخطاء في كل هذا ، عامًا بعد عام.

وفي الوقت نفسه ، ما أقوم به هو إعطاء عرض المجموعة مندوب وتنفيذ collectionView(_:layout:sizeForItemAt:) ، وأقترح عليك أن تفعل الشيء نفسه.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام