Вам, вероятно, придется взглянуть на использование CALayers напрямую.NSCollectionView
получает большую часть своей магии от CoreAnimation IIRC, и похоже, что вам, возможно, придется дублировать некоторые из них.В качестве альтернативы вы можете попробовать использовать вложенные представления коллекций - один, содержащий группы, затем каждая группа содержит другое представление коллекции отдельных элементов.
В любом случае, ваша иерархия представления / слоя будет одинаковой.У вас будет контейнер верхнего уровня, который имеет только один столбец (поскольку группы растягиваются по всей ширине), тогда каждый элемент в нем будет иметь любое количество столбцов в зависимости от ширины элемента.т. е. элементы представления вашей «групповой» коллекции будут растягиваться на всю ширину, но ваши отдельные элементы в этих группах не будут.
Если вы решите использовать необработанный подход CALayer
, тогда вы захотите посмотретьна CAConstraintLayoutManager
.Это то, что обеспечивает магию внутри NSCollectionView
.Хорошее место, чтобы начать искать информацию об этом - Книга CoreAnimation Билла Дадни от Прагматических Программистов .В настоящее время Билл является официальным евангелистом платформы для Apple, поэтому я думаю, что можно с уверенностью сказать, что он знает, о чем там говорит.
В целом, я бы предложил использовать для начала вложенный подход NSCollectionView
, и посмотритепри переходе к необработанному CoreAnimation только в том случае, если кажется, что производительности не хватает, или если у вас есть проблемы с получением каких-то вещей для работы.Использование NSCollectionView
позволяет вам сохранить все ваши текущие значения NSView
на месте, так что будет меньше работы.Если все в порядке, значит ты дома и сухой.Если нет, у вас есть еще кое-что, что вы можете настроить на свое усмотрение.