В совершенно новом и довольно аккуратном UICollectionViewCompositionalLayout
- как можно кэшировать UICollectionViewLayoutAttributes
при первоначальном создании?
Все известные методы и свойства кажутся встроенными, поскольку новый класс макета наследуется от UICollectionViewLayout
.
Возвращаясь к «старому» подходу UICollectionViewLayout
, путь для такой задачи, насколько мне известно, заключался в использовании метода prepare () для заполнения (n) массива (ов) заказным [UICollectionViewLayoutAttributes]
.
Насколько я понимаю, новый класс макетов создает макет секция за секцией, возвращая -> NSCollectionLayoutSection
из того, что мы видели как метод createLayout()
в докладе WWDC19 Достижения в макете представления коллекции . И, похоже, это делается только один раз при инициализации.
Теперь я подклассифицировал UICollectionViewCompositionalLayout
, и класс возвращает layoutAttributesForElements
, как и следовало ожидать:
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let superAttributes = super.layoutAttributesForElements(in: rect)
print("I am returning attributes: ", supersAttributes)
return superAttributes
}
Но так как они не созданы вручную, где я могу сразу перехватить эти атрибуты, чтобы добавить их в массив кеша?
Причина этого пути в том, что я пытаюсь воссоздать очень, очень высокую коллекцию ViewLayout, которую мне нужно масштабировать. И это стало возможным (по крайней мере, в прошлом) с помощью кэша, изменения кэшированных атрибутов во время zoon и возврата layoutAttributesForElements(in: rect)
из кэша на протяжении всего жизненного цикла.
Техника, которую я видел у Рэя Вендерлиха и в других местах.
Любой вклад был бы великолепен! Давайте повеселимся, разбираясь в новом, более простом мире спорных коллекций Views!
Большое спасибо за чтение.