2017-02-14 26 views
1

Я пытаюсь создать NSCollectionView, где его элементы адаптируются к доступному пространству, а не определяют фиксированный размер для элементов и соответственно изменяют размер NSCollectionView.Автоматическое изменение размера NSCollectionViewItem для установки экрана

Я не мог понять, как добиться этого с помощью NSCollectionViewFlowLayout, поскольку для его элементов требуется фиксированный размер. Я приблизился к желаемому результату с помощью NSCollectionViewGridLayout. Однако мне нужно, чтобы CollectionViewItems сохранял соотношение сторон (квадратов) при масштабировании окна, содержащего NSCollectionView, в то время как GridLayout масштабирует элементы соответственно их min и maxItemSize. В зависимости от размера окна и количества элементов в коллекции я получаю элементы, которые не являются точно квадратами.

скриншот Пример: distorted NSCollectionViewItems

Я мог бы обойти, что с установкой maximumNumberOfColumns в сетке, в зависимости от количества элементов в коллекции и размер окна, однако, кажется, немного громоздким. Есть ли лучший способ достичь желаемого макета? Может быть, с пользовательским NSCollectionViewLayout?

ответ

1

Вы должны реализовать следующий протокол в контроллере:

NSCollectionViewDelegateFlowLayout 

Он имеет множество методов, позволяющих тонкой настройки вещи (размер/положение/маржу). Не забудьте установить формат представления коллекции как «поток» (в IB).

Посмотрите на реализацию следующих методов:

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAtIndex section: Int) -> NSEdgeInsets { 

    ... 

} 

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

    ... 
} 

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
    ... 
} 
+0

Это означало бы, чтобы вычислить размер ячеек в зависимости от размера окна и количество предметов, не так ли? Для этого нет «автоматического макета»? – rooney

+0

Исправить. Для таких деталей нет автоматической компоновки. Мне жаль, что они не сделали это немного больше, чем CSS-flexbox. –