2017-02-14 66 views
1

我想创建一个NSCollectionView它的项目适应可用空间,而不是为项目定义一个固定的大小,并相应地调整NSCollectionView的大小。自动调整大小NSCollectionViewItem适合屏幕

我找不出一种方法来实现NSCollectionViewFlowLayout,因为它需要一个固定大小的项目。我非常接近NSCollectionViewGridLayout所需的结果。不过,当缩放包含NSCollectionView的窗口时,我需要CollectionViewItem来保持它们的宽高比(正方形),而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看起来更多一点。 –

相关问题