Пользовательская ширина ячейки для одного collectionView - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть 3 collectionViews в одном контроллере представления.Один имеет все ячейки одинаковой ширины и не изменяется.Другой я хотел бы установить ширину ячейки в коде, используя константу.Последний вычислит ширину своей ячейки на основе предыдущей константы и других факторов в пользовательском макете потока.

Я пробовал

extension YourViewController: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {



      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
             if collectionView == neededCollectionView {
             return CGSize(width: constantWidth, height: constHeight)
             } else {
                // here ignore all the others and tell them to get this size as usual
             }
        }

    }

, но это, похоже, изменяет ширину для всех представлений коллекции.. Как мне получить эти два, игнорировать 2 вида коллекций, размер которых рассчитан где-то еще

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

У вас есть два варианта

ПЕРВЫЙ ВАРИАНТ: Возвращает оценочный размер элемента каждого CollectionViewCell

1. Получите ссылку на IBOutlet от каждого CollectionViewFlowLayout UICollectionViewFlowLayoutIBOutlet

@IBOutlet weak var firstFlowLayout: UICollectionViewFlowLayout!

2. Добавление UICollectionViewDelegateFlowLayout делегата в ваш viewController

3. Реализация делегатаМетод

func collectionView( _ collectionView: UICollectionView,layoutcollectionViewLayout: UICollectionViewLayout,sizeForItemAtindexPath: IndexPath) -> CGSize {

         if collectionView.tag == 1 {
         return CGSize(width: constantWidth, height: constHeight)
         } elseIf collectionView.tag == 2 {
         return firstFlowLayout.estimatedItemSize
         }
}

ВТОРОЙ ВАРИАНТ: Шаблон проектирования Adepter

Вы также можете использовать класс адаптера для каждого набора коллекций, и каждый адаптер имеет свою реализацию для решения этой проблемы, например:

https://stackoverflow.com/a/50920915/5233180

НЕ : эту реализацию для TableView вы можете сделать для коллекции viewview

0 голосов
/ 19 сентября 2018

в этой функции, которую вы не можете игнорировать, вам необходимо вернуть

CGSize

всегда.

попробовать точку останова и проверить, еслион попадает в закрытие else, если вы можете попытаться добавить эту строку,

 return CGSize(width: yourDefualtWidthConst, height:yourDefualtHeightconst)

или эту

 return collectionView.itemSize 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...