10.11 NSCollectionView - определение размера ячейки динамически

Примечания к выпуску AppKit для OS X v10.11 предполагает, что элементы представления коллекции могут быть изменены для каждого элемента:

Размер элемента может быть определен глобально для всех элементов CollectionView (путем установки свойства «itemSize» в NSCollectionViewFlowLayout) или может варьироваться от одного элемента к другому (путем реализации -collectionView: layout: sizeForItemAtIndexPath: в делегате вашего CollectionView).

В моем случае мой CollectionViewItem состоит из одной метки, которая содержит строку различной длины. Я использую NSCollectionView для отображения массива строк, так как NSStackViews не поддерживают привязки массива и не переходят на новые строки. Массив строк связан с содержимым NSCollectionView через контроллер массива.

Файл пера моего элемента настроен правильно, корневое представление и метка имеютСодержание обниматься а такжеСопротивление сжатию содержимого Приоритеты 1000, а края выровнены с помощью AutoLayout.

Теперь метод делегата NSCollectionViewLayout имеет следующую подпись:

func collectionView(collectionView: NSCollectionView, 
                    layout collectionViewLayout: NSCollectionViewLayout, 
                    sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize

Моя идея теперь состоит в том, чтобы захватить сам элемент, выполнить макет над ним, а затем вернуть новый размер элемента.

let item = collectionView.itemAtIndexPath(indexPath)!
item.view.layout()
return item.view.bounds.size

Проблема этого подхода в том, что itemAtIndexPath возвращает nil. Если я возвращаю размер по умолчанию в нулевом случае, этот размер по умолчанию используется для всех ячеек.

Как я могу установить NSCollectionView для соблюдения ограничений AutoLayout моего элемента и для каждой ячейки динамически использовать вычисленный размер?

Ответы на вопрос(1)

Ваш ответ на вопрос